建表约束,可以更好的保证数据的正确性,有效性,完整性。
基本建表约束有如下6种类型
主键、唯一、外键、非空、默认、自增
查看表结构语句查看表的约束:
desc 表名;
查看表的创建语句
show create table 表名;
1.主键约束(自带有自增约束 和 非空约束 ,可使用联合主键,任一条件非空)
创建表时,加入约束
- primary key //在列字段追加添加
- primary key(id) //单独做一列填写
- primary key(id1,id2,…) //联合主键
若使用了联合主键:由多个id组成,组成唯一即可,任一不为空
追加主键约束:(假设列名为 id)
alter table 表名 add primary key(id);
删除主键约束:
alter table 表名 drop primary key;
修改表增加主键:
alter table 表名 modify id int primary key;
2.唯一约束
- unique//列名后追加
- unique(id)//在新一列填写
- unique(id1,id2);//联合唯一约束
增加唯一约束
(简单的写法,unique(id) ,会自动把第一个属性作为键名)
alter table 表名 add unique key 键名(属性列表);
删除唯一约束:
(联合唯一约束,使用简单写法会取其中一个名称作为 key 的名字作为键名)
alter table 表名 drop index 键名;
修改增加唯一约束:
alter table 表名 modify 列名 数据类型 unique;
3.外键约束
- foreign key(本表列) references 外表(列); //建表时增加(新一列)
在建表后增加 ( constraint 外键名称 可省略,会自动分配键名)
alter table 表名 add constraint 外键名称 foreign key (属性列表) references 外表(属性列表);
删除外键约束
alter table 表名 drop foreign key 外键名称;
注意:外键约束常见的问题如
- 创建问题:被引用的列,必须是 主键,或唯一约束的字段(可以为 null)
- 删除问题:必须先删除 “子表数据”,才可删除 “父表” 数据
- 修改问题,在增加外键时,需要进行级联操作,(更新与删除可同时添加)
级联更新
(增加外键约束语句) on update cascade;
级联删除(比较危险)
(增加外键约束语句) on delete cascade;
4.非空约束
- not null;
- 不允许为空
修改增加非空约束
alter table 表名 modify 列名 not null;
修改删除非空约束
alter table 表名 modify 列名 属性类型;
5.默认约束
- default value //在建表时增加
在建表后增加默认约束
alter table 表名 modify 列名 属性类型 default value;
删除默认约束
alter table 表名 modify 列名 属性类型;
6.自增约束
- auto_increment //建表时自增约束
- 对数值类型,每次自动加1
在创建表后追加自增约束
alter table 表名 modify 列名 数据类型 auto_increment;
删除自增约束
alter table 表名 modify 列名 数据类型;