约束基本概念:
作用于表中字段上的规则,用于限制存储在表中的数据。
查看约束: show create table 表名;
约束分类:
(约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束)
主键约束(pk)
alter table table_name add constraint pk_name primary key(字段名);#设置该字段为主键,主键约束名称称为pk_name
设置主键约束的几种方式:
1.创建表的时候指定主键约束
create table table_name(id int primary key,name varchar(20));
create table table_name(id int,name varchar(20),primary key(id));
create table table_name(id int,name varchar(20),constraint pk primary key(id));
2.修改某一列为主键
alter table 表名 add [constraint] primary key(id);alter table 表名 modify [column] 字段名 属性 primary key; --修改列类型alter table 表名 change [column] 字段名 字段名 属性 primary key; --修改列名称和类型
3.删除主键约束
alter table 表名 drop primary key;
自增长列(列识别)
create table goods(no int primary key auto_increment,name varchar(20)); --直接设置自增长alter table 表名 modify [column] 列名 列类型 auto_increment; --修改为自增长列alter table 表名 change 列名 列名 列类型 auto_increment;alter table 表名 modify [column] id int; --删除自增长列
联合主键:
create table 表名(列名1 数据类型,列名2 数据类型,列名3 数据类型,primary key(列名1,列名2,列名3));alter table 表名 add [constraint] primary key(列名1,列名2,列名3); --修改列的时候创建alter table 表名称 drop primary key; --删除
唯一约束
创建表时:
create table table_name(id int,name varchar(20) unique);create table table_name(id int,name varchar(20),constraint 约束名 unique(name));
修改表:
alter table 表名 add unique(列名称);
alter table 表名 add constraint [constraint_name] unique(列名称);
alter table 表名 change [column] 列名 列名 类型 unique;
alter table 表名 modify [column] 列名 列类型 unique;
删除唯一约束:
alter table 列名称 drop index 设置唯一时的名称;
(如果没有设置约束名称,名称默认是字段名)
唯一约束允许有多个NULL值
默认约束:
概念:为列中的值设置默认值 default value
创建表时:
create table table_name(id int default value,name varchar(20) unique);
修改表:
alter table 表名 modify [column] 列名 列类型 default 默认值;
alter table 表名 change 列名 列名 列类型 default 默认值;
删除:
alter table 表名 modify [column] 列名 列类型;
alter table 表名 alter column 列名 drop default;
如果已经设置了值,默认值则无效。
非空约束
NOT NULL:非空,用于保证该字段的值不能为空。
创建表:
create table table_name(id int not null,name varchar(20));
alter table 表名 modify [column] 列名 列类型 not null;
alter table 表名 change 列名 列名 列类型 not null;
删除:
alter table 表名 modify [column] 列名 列类型 [null];
修改列的约束要确保有数据满足非空约束条件,否则可能操作失败。
检查约束
添加检查约束:
create table employees(id int auto_increment primary key,
name varchar(50),
age int,
email varchar(100),
check(age>=18)); --添加检查约束,年龄必须>=18
修改表的时候:
alter table 表名 change 列名 列名 列类型 check(condition);
alter table 表名 modify 列名 列类型 check(condition);
alter table 表名 add constraint 列名 check(condition);
删除检查约束:
alter table 表名 drop constraint 约束名;
外键约束
创建表:
create table table_name(id int not null,
name varchar(20),
`rid` int,
constraint `abc` foreign key(rid) references b(id));
其中rid是从表的外键,‘abc’是约束名,b是主表名,b(id)是主表的主键
alter table 从表表名 add constraint 约束名称 foreign key(从表字段)references 主表表名(主表字段);
alter table goods add constraint `fk_category_no` foreign key(category_no) references category(no);
删除表:
alter table 表名称 drop foreign key 索引名;--设置外键时的名称
注:
1.外键列类型需要与引用列类型一致
2.外键列的值必须是主表中引用列的值或者 NULL
3.一个表可以有多个外键列
4.从表列可以随便删除
5.删除主表数据时,会先检查从表中有没有对此数据的关联,如果有就不能直接 删除
6.在 设 置 外 键 的 时 候 后 面 添 加 on delete cascade / on updatecascade 在删除/更新主表时,级联删除/更新外键列的数据