MySQL数据库——约束(概述、约束演示、外键约束、删除/更新行为)

目录

概述

约束演示

表格创建

验证

图形化界面约束

外键约束

概念

语法

外键删除/更新行为

总结


概述

  1. 概念:约束是作用于表中字段上的规则,用于限制存储在表中数据。
  2. 目的:保证数据库中数据的正确、有效性和完整性。
  3. 分类:
约束 描述 关键字
非空约束 限制该字段的数据不能为NULL NOT NULL
唯一约束 保证该字段的所有数据都是唯一、不重复的 UNIQUE
主键约束 主键是一行数据的为唯一标识,要求非空且唯一 PRIMARY KEY
默认约束 保存数据时,如果未指定该字段的值,则采用默认值 DEFAULT
检查约束(8.0.16版本之后) 保存字段值满足某一个条件 CHECK
外键约束 用来让两张表的数据之间建立连接,保证数据的一致性和完整性 FOREIGN KEY

约束演示

表格创建

根据需求,完成表格的创建:

字段名 字段含义 字段类型 约束条件 约束关键字
id ID唯一标识 int 主键,并且自动增长 PRIMARY KEY,AUTO_INCREMENT
name 姓名 varchar(10) 不为空,并且唯一 NOT NULL,UNIQUE
age 年龄 int 大于0,并且小于等于120 CHECK
status 状态 char(1) 如果没有指定该值,默认为1 DEFAULT
gender 性别 char(1)

自动增长:随着表格的行数自行增加id,关键字为auto_increment

create table user(
    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 '性别'
) comment '用户表';

验证

1.主键及自动增长

我们插入数据时,不输入ID

create table user(
    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 '性别'
) comment '用户表';

此时发现,id作为主键,并且拥有自动增长的约束,会随着行数在增加而自动增加,不需要我们进行输入

2.姓名不为空,并且唯一

当我们姓名输入为空时,就会报错;而姓名重复时,为该条插入值申请了主键之后,并不会真的将其插入,所以会出现id值跳跃了1.(例如:1,2,3,5)

3.年龄必须要大于0,小于等于120

4.状态没有指定时,默认为1

insert into user (name,age,gender)
            values ('Jack6',18,'男');

图形化界面约束

外键约束

概念

外键用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性。

注意:目前上述的两张表,在数据库层面,并未建立外键关联,所以是无法保证数据的一致性和完整性的。 

也就是说,删除了部门表中的研发部,员工表中所属研发部的员工并不会被删除,从而出现数据的完整性问题。

语法

添加外键

CREATE TABLE 表名(
    字段名 数据类型,
    ...
    [CONSTRAINT] [外键名称] FOREIGN KEY (外键字段名) REFERENCES 主表 (主列表名)
);

-- 或
ALTER TABLE 表名 
    ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名) REFERENCE 主表 (主列表名);

删除外键

ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;

示例

alter table emp 
    add constraint fk_emp_dept_id foreign key (dept_id) references dept(id);

alter table emp drop foreign key fk_emp_dept_id;

外键删除/更新行为

行为 说明
NO ACTION 当在父表中删除/更新对应记录时,首先检查记录是否有对应外键,如果有则不允许删除/更新。(与RESTRICT一致)
RESTRICT 当在父表中删除/更新对应记录时,首先检查记录是否有对应外键,如果有则不允许删除/更新。(与NO ACTION一致)
CASCADE 当在父表中删除/更新对应记录时,首先检查记录是否有对应外键,如果有,则也删除/更新外键在子表中的记录。
SET NULL 当在父表中删除对应记录时,首先检查记录是否有对应外键,如果有则设置子表中该外键值为null(要求该外键允许取null)
SET DEFAULT 父表有变更时,子表将外键列设置成一个默认的值(Innodb不支持)
ALTER TABLE 表名 
    ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名) REFERENCE 主表 (主列表名)
        ON UPDATE CASCADE ON DELETE CASCADE;

演示

alter table emp
    add constraint fk_emp_dept_id foreign key (dept_id) references dept(id)
        on update cascade  on delete  cascade ;

 这时候把主表研发部的id改为6:

 子表也进行了更新: 

总结

  1. 非空约束:NOT NULL
  2. 唯一约束:UNIQUE
  3. 主键约束:PRIMARY KEY (自增:AUTO_INCREMENT)
  4. 默认约束:DEFAULT
  5. 检查约束:CHECK
  6. 外键:FOREIGN KEY

end


学习自:黑马程序员——MySQL数据库课程

猜你喜欢

转载自blog.csdn.net/li13437542099/article/details/132378896