0


【MySQL数据库】一约束

在这里插入图片描述

在这里插入图片描述
🍁

博客主页:

👉@不会压弯的小飞侠

欢迎关注:

👉

点赞

👍

收藏

留言


系列专栏:

👉MySQL数据库专栏

欢迎加入社区:

👉不会压弯的小飞侠

人生格言:知足上进,不负野心。

🔥

欢迎大佬指正,一起学习!一起加油!

在这里插入图片描述


🍁概述

  • 约束是作用于表中字段上的规则,用于限制存储在表中的数据。

  • 目的:保证数据库中数据的正确、有效性和完整性。

  • 分类
    约束描述关键字非空约束限制该字段的数据不能为nullNOT NULL唯一约束保证该字段的所有数据都是唯一、不重复的UNIQUE主键约束主键是一行数据的唯一标识,要求非空且唯一PRIMARY KEY默认约束保存数据时,如果未指定该字段的值,则采用默认值DEFALLT检查约束(8.0.16版本之后)保证字段值满足某一个条件CHECK外键约束用来让两张表的数据之间建立连接,保证数据的一致性和完整性FOREIGN KEY

  • 案例分析

  • 创建一个user表

  • 字段名: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)- 约束条件:无

注意:由于MySQL版本过低,本次年龄案例就不演示了。
如需要自行测试:

age intcheck( age >0&& age <=120)comment'年龄',
  • 创建user表
createtableuser(
    id intprimarykeyauto_incrementcomment'主键',
    name varchar(10)notnulluniquecomment'姓名',statuschar(1)default'1'comment'状态',
    gender char(1)comment'性别')comment'用户表';
  • 创建成功

在这里插入图片描述

  • 插入数据
age intcheck( age >0&& age <=120)comment'年龄',

在这里插入图片描述

  • 数据插入成功

在这里插入图片描述

  • 插入一条name为空的数据进行测试
insertintouser(name,status,gender)values(noll,'0','男');

在这里插入图片描述

  • 插入一条name不唯一的数据进行测试
insertintouser(name,status,gender)values('jkj','0','男');

在这里插入图片描述
🍁外键约束

  • 外键用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性。在这里插入图片描述
  • 创建dept父表
createtable dept(
    id   intauto_incrementcomment'ID'primarykey,
    name varchar(50)notnullcomment'部门名称')comment'部门表';
  • 往dept父表中插入数据
INSERTINTO dept (id, name)VALUES(1,'研发部'),(2,'市场部'),(3,'财务部'),(4,'销售部'),(5,'总经办');

在这里插入图片描述

  • 创建emp子表
createtable emp(
    id  intauto_incrementcomment'ID'primarykey,
    name varchar(50)notnullcomment'姓名',
    age  intcomment'年龄',
    job varchar(20)comment'职位',
    salary intcomment'薪资',
    entrydate datecomment'入职时间',
    managerid intcomment'直属领导ID',
    dept_id intcomment'部门ID')comment'员工表';
  • 往emp子表中插入数据
INSERTINTO emp (id, name, age, job,salary, entrydate, managerid, dept_id)VALUES(1,'张三',66,'总裁',20000,'2000-01-01',null,5),(2,'李四',20,'项目经理',12500,'2005-12-05',1,1),(3,'王二',33,'开发',8400,'2000-11-03',2,1),(4,'刘五',48,'开发',11000,'2002-02-05',2,1),(5,'小七',43,'开发',10500,'2004-09-07',3,1),(6,'老八',19,'程序员',6600,'2004-10-12',2,1);

在这里插入图片描述

  • 此时两表还没建立连接

🍁外键约束语法

  • 添加外键 - 方式一
CREATETABLE 表名(
            字段名 数据类型,.…
          [CONSTRAINT][外键名称]FOREIGNKEY(外键字段名)REFERENCES 主表(主表列名));
  • 方式二
ALTERTABLE 表名 ADDCONSTRAINT 外键名称 FOREIGNKEY(外键字段名)REFERENCES 主表(主表列名);
  • 删除外键
ALTERTABLE 表名 DROPFOREIGNKEY 外键名称;
  • 案例分析
  • 添加外键
altertable emp addconstraint fk_emp_dept_id foreignkey(dept_id)references dept(id);

在这里插入图片描述

  • 删除外键
altertable emp dropforeignkey fk_emp_dept_id;

在这里插入图片描述

🍁外键的删除和更新行为
行为说明NO ACTION当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。(与RESTRICT一致)RESTRICT当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。(与NO ACTION一致)CASCADE当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有,则也删除/更新外键在子表中的记录。SET NULL当在父表中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(这就要求该外键允许取null)。SET DEFAULT父表有变更时,子表将外键列设置成一个默认的值(Innodb不支持)

  • 语法
 ALTERTABLE表名 ADD CONSTRANT 外键名称 FOREIGNKEY(外键字段) REERENCES 主表名(主表字段名)ONUPDATE CSCADE ONDELETE CASCAOE;
  • 案例分析:
  • 以cascade 为例
altertable emp addconstraint fk_emp_dept_id foreignkey(dept_id)references dept(id)onupdatecascadeondeletecascade;
  • 将研发部id改为6

在这里插入图片描述

  • 此时子表中dept_id由1变成了6

在这里插入图片描述

  • 将研发部id为6删除

在这里插入图片描述

  • 此时子表就剩了一条数据

在这里插入图片描述

  • 以SET NULL为例
altertable emp addconstraint fk_emp_dept_id foreignkey(dept_id)references dept(id)onupdatesetnullondeletesetnull;
  • 将研发部id为1删除

在这里插入图片描述

  • 此时子表中dept_id由1变成了null

在这里插入图片描述


在这里插入图片描述

标签: 数据库 mysql java

本文转载自: https://blog.csdn.net/qq_43514330/article/details/126754934
版权归原作者 不会压弯的小飞侠 所有, 如有侵权,请联系我们删除。

“【MySQL数据库】一约束”的评论:

还没有评论