概念:约束是作用于表中的字段上的规则,用于限制存储表中的数据
目的:保证数据库中数据的正确,有效和完整
分类:
约束 | 描述 | 关键字 |
非空约束 | 限制该字段的数据不能为null | NOT NULL |
唯一约束 | 保证该字段所有的数据都是唯一,不重复的 | UNIQUE |
主键约束 | 主键是一行数据的唯一标识,要求非空且唯一 | PRIMARY KEY |
默认约束 | 保存数据时,如果为指定该字段的值,则采用默认值 | DEFAULT |
检查约束 | 保证字段值满足某一条件 | CHECK |
外键约束 | 用来让两张表的数据之间建立连接,保证数据的一致性和完整性 | FOREIGN KEY |
就如同我们呢目前需要来创建一张表,其中包含的信息有:
字段名 字段含义 字段类型 约束条件 id ID唯一标识 int 主键,自动增长 name 姓名 varchar(10) 非空,且唯一 age 年龄 int 大于0,小于120 status 状态 char(1) 默认值为1 gender 姓别 char(1) 无
那我们如何创建这张表呢,只需要输入以下内容,我们这里创建一个名为nice的表,运行后我们就可以来查看下我们的表结构了:
create table nice(
id int primary KEY auto_increment comment '主键',
name VARCHAR(10) not null UNIQUE comment '姓名',
age int CHECK (age > 0 AND age <= 120 ) comment '年龄',
status CHAR(1) DEFAULT '1' comment '状态',
gender CHAR(1)
) COMMENT '学生表'
我们可以看到我们目前已经实现了我们所想要的功能了,当然如果大家感兴趣的话,也可以尝试插入一些数据来 验证下我们的结果是否真实,当然在这里我们就不做多的演示
需要我们着重讲解的是我们现在这里着重需要讲的就是外键约束
首先我们先来看下什么是外键:
他的概念为:外键是用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性。
那么这两张表中我们可以看到emp表的dept_id为这张表的外键,dept表中id为这张表的主键,并且这两张表之间由这个主键和外键联系起来了,所以我们就可以称这两张表存在主键外键关联,并且我们将此关联中主键所在的表称为父表,外键所在的表称为子表或者从表。
那我们首先先创建此表,
CREATE table dept(
id int auto_increment COMMENT 'ID' PRIMARY KEY,
name VARCHAR(50) not null COMMENT '部门名称'
) COMMENT '部门表'
CREATE TABLE emp(
id int auto_increment COMMENT 'ID' PRIMARY KEY,
NAME VARCHAR(50) not null comment '姓名',
age int comment ,
job VARCHAR(20) COMMENT'职位',
salary int comment '薪资',
entrydate date COMMENT '入职时间',
managerid int COMMENT '直属领导ID',
dept_id int COMMENT '部门ID',
) COMMENT '员工表';
插入两张表以后,这时候我们可以看到我们两张表的ID列均为主键,那么我我们现在需要将dept表的id列与emp表的dept_id关联,那我们应该怎么做呢,我们可以输入
ALTER TABLE
emp
ADD CONSTRAINT
fk_emp_dept_id foreign key (dept_id)
REFERENCES
dept(id);
这段文字代表我们在emp表中添加一个外键,外键名称为fk_emp_dept_id,添加在dept表中,并且我们外键对应的主键表为dept,对应主键表中的字段为id
当然对应的删除外键的时候我们需要输入的就是
alter table emp drop foreign key fk_emp_dept_id;
这样我们就可以删除掉emp表中的外键了
当然我们创建外键的时候不但可以在我们创建表之后创建,我们也可以在创建表的过程中就创建好外键,这个大家有兴趣的话也可以自己尝试以下
那创立好了外键我们这里继续来看外键约束
外键约束,他会约束表的一些行为
行为 | 说明 |
NO ACTION | 当父表中删除/更新对应记录时,首先检查该记录是否由对应外键,如果有则不允许更新/删除 |
RESTARICT | 当父表中删除/更新对应记录时,首先检查该记录是否由对应外键,如果有则不允许更新/删除 |
CASCADE | 当父表中删除/更新对应记录时,首先检查该记录是否由对应外键,如果有则更新/删除外键在子表中的记录 |
SET NULL | 当在父表中删除对应记录时,首先检查该记录是否对应外键,如果有则设置子表中该外键值为null(要求外键允许null值) |
SET DEAFULT | 父表有变更时,子表将外键列设置成一个默认的值 |
当然大家如果感兴趣的话,可以插入外键之后把这些实际使用以下看看