约束:约束是创建表时给字段添加的限制条件。
1、非空约束:not null
,字段不能为null
create table t1(id int,age int not null);
insert into t1 values(1,18);//成功
insert into t1 values(2,null);//失败
2、唯一约束:unique
,字段值不能重复
create table t2(id int,age int unique);
insert into t2 values(1,18);//成功
insert into t2 values(2,18);//失败
3、主键约束:primary key
,字段的值唯一且非空
创建表时添加主键约束:
create table t3(id int primary key,age int);
创建表之后添加主键约束:
create table t3(id int,age int);
alert table t3 add primary key(id);
删除主键约束:因为一个表中只有一个主键,所以删除时不用指定主键是哪一个。
alter table t3 drop primary key;
4、自增:auto_increment
数值只增不减,从历史最大值的基础上+1,字段值赋值为null的时候自动+1,使用delete
全表删除数据时,自增数值不变,使用truncate
自增清零。
5、默认约束:default
,给字段添加默认值,当插入数据不给该字段赋值时,默认值生效。
create table t4(id int,age int defalut 10);
insert into t4 values(1,20);
insert into t4 values(2,null);
insert into t4 (id) values(3);//默认值生效
6、检查约束:check
(该约束为Mysql8.0的新特性,之前版本语法通过但是不生效)
create table t5(id int,age int check(age > 10));
insert into t5 values(1,5);
插入数据报错:
7、外键约束:
外键约束的作用:为了保证两个表之间的关系正确建立
- 插入数据时外键可以为null,可以重复但是不能是另一张表不存在的数据;
- 被依赖的表不能被先删除;
- 被依赖的数据不能先删除;
语法:constraint XXX foreign key(外键字段名) references 主表名(主表字段名)
该语法可以在 CREATE TABLE 和 ALTER TABLE 时使用,如果不指定CONSTRAINT XXX,MYSQL会自动生成一个名字。
如何使用外键:
1)创建部门表:
create table dept(id int primary key auto_increment,name varchar(10));
2)创建员工表:
create table emp(id int primary key auto_increment,name varchar(10),deptid int,constraint fk_dept foreign key(deptid) references dept(id));
3)插入数据:
insert into dept values(null,'神仙'),(null,'妖怪');
insert into emp values(null,'悟空',1);
insert into emp values(null,'八戒',1);
insert into emp values(null,'赛亚人',3);//失败 外键约束
drop table dept;//失败 外键约束
delete from dept where id=1;//失败 外键约束
delete from dept where id=2;/成功