约束
约束是作用于表中字段上的规则,用于限制存储在表中的数据,保证数据库中数据的正确、有效和完整。
一. 常用的约束
- 约束作用于表中的字段,可以在创建表或修改表的时候添加约束。
- AUTO_INCREMENT 约束关键字 自动增长:用于比如每次新添加一行数据,id就+1。
- 如果自增和主键一起使用时,插入了一行未按约束的数据(会显示插入失败),数据库会申请一次主键,那么下一次插入正确的数据时,获得的自增主键就会是数据库中前一个自增主键+2的值。
- 一个字段可以有多个约束。
- 创建表时添加约束:
create table {表名}(
字段1 类型 [{约束}] [comment 注释],
字段2 类型 [{约束}] [comment 注释],
...
字段n 类型 [{约束}] [comment 注释]
)[comment 表注释];
- CHECK 检查约束语法:
# 下面是创建表语法中的其中一行
# 如我们的目的是:创建一个age字段,限制取值范围为0-120
age int check ( age > 0 and age <= 120) comment '年龄',
- DEFAULT 默认约束语法:
# 下面是创建表语法中的其中一行
# 如我们的目的是:创建一个status字段,默认取值为1
status char(1) default '1' comment '状态',
二. 外键约束
外键约束用于两张表之间建立连接,从而保证数据的一致性和完整性。
- 如上图所示,箭头的起点称为“子表”,终点称为“父表”。
- 主表与从表:主表存的是从北京到上海的高铁信息,从表则存的是:北京-天津;天津-河北….这种存在一定的主从关系,在数据库中称为主从表。
- 父表与子表:你定义了一个导航菜单表(父表),然后每一个菜单下的子菜单定义了一张表(子表),这类数据称为父表与子表。
1. 添加外键:
# 创建表时建立外键
create table {表名}(
{字段名} {数据类型},
...
[constraint] [{外键名称}] foreign key({外键字段名}) references {主表}({主表列名})
);
# 修改表时建立外键
alter table {表名} add constraint {外键名称} foreign key({外键字段名}) references {主表}({主表列名});
2. 删除外键:
alter table {表名} drop foreign key {外键名};
3. 外键的删除/更新行为
# 添加外键时指定行为
alter table {表名} add constraint {外键名称} foreign key({外键字段名}) references {主表}({主表列名}) on update {在更新时的行为} on delete {在删除时的行为};