作用:对表中的数据进行限定,保证数据的正确性、有效性和完整性
1. 主键约束
作用
主键约束(primary key),能够唯一确定表中的一条记录。我们通过给某个字段添加该约束,就可以使得该字段不重复且不为空。
语法
#在创建表时,添加主键约束create table stu(id INT primary key, --给id添加主键约束name VARCHAR(20));#联合主键CREATE TABLE stu (id INT,name VARCHAR(20),PRIMARY KEY(id, name) -- 此处字段id和name一同作为主键,联合主键要求每个字段加起来不同即可(无需每个字段都不同));#删除主键ALTER TABLE stu DROP PRIMARY KEY;#创建完表后,添加主键ALERT TABLE stu ADD PRIMARY KEY (id);#或ALTER TABLE stu MODIFY id INT PRIMARY KEY;
注意
- 主键非空且唯一
- 主键就是表中记录的唯一标识
2. 自增约束
作用
如果某一列是数值类型的,使用 auto_increment 可以来完成值得自动增长
语法
#在创建表时,添加主键约束,并且完成主键自增长
create table stu(
id int primary key auto_increment,-- 给id添加主键约束,自增约束
name varchar(20)
);
#删除自动增长
ALTER TABLE stu MODIFY id INT;
#添加自动增长
ALTER TABLE stu MODIFY id INT AUTO_INCREMENT;
注意
自增约束一般与主键搭配使用
3. 唯一约束
作用
唯一约束修饰的字段不可以重复
语法
#在创建表时,添加主键约束,并且完成主键自增长,唯一约束
create table stu(
id int primary key auto_increment UNIQUE,-- 给id添加主键约束,自增约束,唯一约束
name varchar(20)
);
#或
CREATE TABLE stu (
id int primary key auto_increment,
name VARCHAR(20),
UNIQUE(id, name)
);
#删除唯一约束
ALTER TABLE stu DROP INDEX phone_number;
#在创建表后,添加唯一约束
ALTER TABLE stu MODIFY phone_number VARCHAR(20) UNIQUE;
注意
- mysql中,唯一约束限定的列的值可以有多个null
- (根据NULL的定义,NULL表示的是未知,因此两个NULL比较的结果既不相等,也不不等,结果仍然是未知。根据这个定义,多个NULL值的存在应该不违反唯一约束,所以是合理的,在oracel也是如此。)
4. 非空约束
作用
非空约束(not null)约束的字段,值不能为null
语法
#创建表时添加约束
CREATE TABLE stu(
id INT,
NAME VARCHAR(20) NOT NULL -- name为非空
);
#删除name的非空约束
ALTER TABLE stu MODIFY NAME VARCHAR(20);
#创建表完后,添加非空约束
ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL;
5. 默认约束
作用
我们插入字段时没有传值,就会使用默认值
语法
#创建表时添加约束
CREATE TABLE stu (
id INT DEFAULT 10,
name VARCHAR(20),
);
6. 外键约束
作用
外键约束(foreign key)让表于表产生关系,从而保证数据的正确性。
语法
#在创建表时,可以添加外键
create table 表名(
....
外键列
constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称)
);
#删除外键
ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
#创建表之后,添加外键
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称);
注意
- 主表中没有的数据,在副表中是不可以使用的
- 主表中的数据被副表引用时,是不可以删除的
7. 级联操作
语法
#添加级联操作
ALTER TABLE 表名 ADD CONSTRAINT 外键名称
FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称) ON UPDATE CASCADE ON DELETE CASCADE ;
#分类:
#级联更新
ON UPDATE CASCADE
#级联删除
ON DELETE CASCADE
