1、常见约束
not null:非空约束,针对某个字段设置其值不为空,如:学生的姓名不能为空。
unique:唯一约束,它可以使某个字段的值不能重复,如:email不能重复:
primary key:主键约束,每个表应该具有主键,主键可以标识记录的唯一性,主键分为单一主键和复合(联合)主键,单一主键是由一个字段构成的,复合(联合)主键是由多个字段构成的。
foreign key:外键约束,外键主要是维护表之间的关系的,主要是为了保证参照完整性,如果表中的某个字段为外键字段,那么该字段的值必须来源于参照的表的主键,如:emp中的deptno值必须来源于dept表中的deptno字段值。
注意:当一个表中存在外键约束时,比如a表中有一个外键来自b表,那么删除数据的时候的时候要先删除a表中的引用记录,再删除b表中的数据。
2、一个完整的创建表并添加约束的模板
drop table if exists t_classes; create table t_classes( classes_id int (3), classes_name varchar(30) not null, constraint pk_classes_id primary key(classes_id) ) drop table if exists t_student; create table t_student( student_id int(10), student_name varchar(50) not null, sex char(2) not null, birthday date not null, email varchar(30) unique, classes_id int (3) not null, constraint pk_student_id primary key(student_id), constraint fk_classes_id foreign key(classes_id) references t_classes(classes_id) )
3、级联更新与级联删除
当一个表中存在外键约束时,删除和修改都会是一个比较令人头疼的事情,一不小心就会报错。可以采用级联的方法去解决这个问题。
on update cascade 级联更新
mysql对有些约束的修改比较麻烦,所以我们可以先删除,再添加 alter table t_student drop foreign key fk_classes_id; alter table t_student add constraint fk_classes_id_1 foreign key(classes_id) references t_classes(classes_id) on update cascade;
on delete cascade 级联删除
mysql对有些约束的修改时不支持的,所以我们可以先删除,再添加 alter table t_student drop foreign key fk_classes_id; alter table t_student add constraint fk_classes_id_1 foreign key(classes_id) references t_classes(classes_id) on delete cascade; delete from t_classes where classes_id = 20;
4、添加约束
① 添加外键约束:alter table 从表 add constraint 约束名称 foreign key 从表(外键字段) references 主表(主键字段);
示例:alter table t_student add constraint fk_classes_id_1 foreign key(classes_id) references t_classes(classes_id);
② 添加主键约束:alter table 表 add constraint 约束名称 primary key 表(主键字段);
示例:alter table t_student add constraint pk primary key(student_id);
③ 添加唯一性约束:alter table 表 add constraint 约束名称 unique 表(字段);
示例:alter table t_student add constraint uk unique(email);
5、修改约束
alter table t_student modify student_name varchar(30) unique;
mysql对有些约束的修改时不支持,所以我们可以先删除,再添加
6、删除约束
删除外键约束:alter table 表名 drop foreign key 约束名;
删除主键约束:alter table 表名 drop primary key ;