顾名思义,用来限制表结构中存储的数据~
????????作用于表中字段上的规则,用于限制存储在表中的数据,目的在于使数据库中的数据正确、有效性和完整性。
? ? ? ? 大致可以分为如下的几类:
(重点关注主键和外键约束~)
name varchar(10) not null unique comment '姓名';
值得一提的是,多个约束之间用空格分开即可~?
(同上,不再赘述)
id int primary key auto_increment comment '主键'
此处实现了id为主键,且可以自动增长的功能~?
(拓展:主键自增的关键字是auto_increment)~
gender char(1) default '男' comment '性别'
age int check (age>0 && age<=120)
?check?后面的括号中是对当前字段的要求。
如果违反了任何一个约束,则会发生报错~?
让两张表的数据之间建立连接,从而保证数据的一致性和完整性~
如上,外键往往传递的是一种联系,部门表中可以唯一标识部门的主键,在员工表中是一个外键
在本例中,部门表被称为父表,而员工表则被称为子表——有外键的表称为子表,外键所关联的称为父表~(也被称为主表和从表)
需要注意的是,仅仅有逻辑上关联而没有物理外键的情况下,是无法保证数据的一致性和完整性的~
?
alter table 表名 add constraint 外键名称 foreign key(外键字段名) reference 主表(主表列名);
??两种添加外键的方式是:
[constraint][外键名] foreign key (外键字段名) reference 主表(主表列名)
?(注意只能关联别的表的主键~)
此时被关联的父表,不能直接删除任何一条字段(被子表关联)——保证数据的完整性~
删除外键的语法是:
alter table 表名 drop foreign key 外键名称;
其中,cascade也称为级联~?
alter table 表名 add constraint 外键名称 foreign key (外键字段) reference 主表名(主表字段名)
on update cascade on delete cascade;
分别规定了在更新父表时咱们操作,在删除父表时怎么操作)——此处则均设置为了级联~?