约束
概念
约束是作用于表中字段的规则,用于限制表中的数据
分类,语法
例子
需求如下
select database() ;
create table user(
id int primary key auto_increment comment 'ID唯一标识',
name varchar(10) not null unique comment '姓名',
age int check ( age > 0 && age <= 120 ) comment '年龄',
status char(1) default '1' comment '状态',
gender char(1) comment '性别'
)comment '用户表'
show tables ;
desc user;
#插入数据
insert into user(name, age, status, gender) VALUES ('Tom1','19','1','男'),('Tom2','25','0','男')```
当插入失败的时候(例如,出现重复的name数据)新的数据的id标识有时候并不连续。但有当我试图输入一个非法的age数据,后面的新数据标识却是连续的,这很奇怪…
ID如果不连续会出问题吗?GPT跟我的回答是这样的:
在大多数数据库管理系统中,确保 AUTO_INCREMENT(或等效机制)生成的 ID 值一定连续是非常困难的,甚至不推荐尝试。这是因为AUTO_INCREMENT的设计初衷并不是为了保证连续性,而是为了提供一个唯一的标识符。
好吧那就放过自己,留到以后慢慢发掘吧
外键约束
概念
下图中展示了一张员工表。在左侧的表中,dept_id标志了该员工属于哪个部门。例如金庸的dept_id字段中值为5,代表他属于总经办。dept_id使用的数据来自右边“部门表”的主键。像这样使用别人的主键作为值的字段就是外键。
包含外键字段的表成为子表,对应的就是父表。
语法
alter table 表名 add constraint 外键名称 foreign key (外键字段名) references 主表 (主表字段名);
例子
下图中创建员工表和部门表
然后添加外键
外键添加完成
此时我们不可以直接删除父表中的某行数据,会报错
删除外键
外键删除,更新行为
直接在原本的添加外键命令后增加 on update 行为 on delete 行为;