
个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~
个人主页:.29.的博客
学习社区:进去逛一逛~
约束
- ⑦【MySQL】约束条件
- 1. 约束的基本使用
- 2. 外键约束
 
⑦【MySQL】约束条件
1. 约束的基本使用
约束:
-  什么是约束? 
-  - 约束是作用于表中字段上的规则,用于限制存储在表中的数据。
 
-  约束的作用: 
-  - 保证数据库中数据的正确性、有效性和完整性。
 
-  约束分类: 
-  -  ① 非空约束—— 限制该字段的数据不能为null
-  -  NOT NULL
 
-  
-  ② 唯一约束—— 保证该字段的所有数据都是唯一、不重复的
-  -  UNIQUE
 
-  
-  ③ 主键约束—— 主键是一行数据的唯一标识,要求非空且唯一
-  -  PRIMARY KEY
 
-  
-  ④ 默认约束—— 保存数据时,未指定该字段的值,则采用默认值
-  -  DEFAULT
 
-  
-  ⑤ 检查约束(8.0.16版本之后)—— 保证字段满足某一条件
-  -  CHECK
 
-  
-  ⑥ 外键约束—— 用来让两证表的数据之间建立连接,保证数据的一致性和完整性
-  -  FOREIGN KEY
 
-  
-  ⑦自增约束 
-  -  AUTO_INCREMENT
 
-  
 
-  
-  -- 案例/* 创建表 ID唯一标识:id、int、主键且自增 姓名:name、varchar(10)、不为空且唯一 年龄:age、int、大于0且小于等于120 状态:status、char(1)、默认值为1 性别:gender、char(1)、无约束条件 */ CREATE TABLE test(id INT COMMENT 'id唯一标识' PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(10) COMMENT '姓名' UNIQUE NOT NULL,age INT COMMENT '年龄' CHECK(age BETWEEN 1 AND 120),STATUS CHAR(1) COMMENT '状态' DEFAULT 1,gender CHAR(1) COMMENT '性别' );-- 查看表结构 DESC test;-- 向表中插入数据,自增字段可以不指定,会按123...n顺序自动填充 INSERT INTO test(NAME,age,STATUS,gender) VALUES ('小一',18,'1','男');-- 当设置唯一约束的字段name插入不唯一数据时,会报错: -- 错误代码: 1062 Duplicate entry '小一' for key 'test.name' INSERT INTO test(NAME,age,STATUS,gender) VALUES ('小一',22,'1','女');-- 当设置非空约束的字段name插入null值,会报错: -- 错误代码: 1048 Column 'name' cannot be null INSERT INTO test(NAME,age,STATUS,gender) VALUES (NULL,22,'1','女');-- 当设置了检查约束的age字段,插入不符合检查条件的数据,会报错: -- 错误代码: 3819 Check constraint 'test_chk_1' is violated. INSERT INTO test(NAME,age,STATUS,gender) VALUES ('小二',-1,'1','女');-- 当插入数据时,没有为默认约束字段status设置值,会自动设置默认值1 INSERT INTO test(NAME,age,gender) VALUES ('小三',66,'女');
2. 外键约束
如何添加外键约束?:
-  方式一(在创建表时指定外键约束): 
-  CREATE TABLE 表名(字段名 数据类型,...[CONSTRAINT] [外键名称] FOREIGN KEY(外键字段名) REFERENCES 主表(主表字段名) );
-  方式二(在修改表时添加外键约束): 
-  ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键字段名) REFERENCES 主表(主表字段名);
外键的删除/更新行为:
-  NO ACTION:在父表进行更新/删除时,首先检查记录是否存在外键,存在则不允许删除/更新。(与RESTRICT行为一致)
-  RESTRICT:在父表进行更新/删除时,首先检查记录是否存在外键,存在则不允许删除/更新。(与NO ACTION行为一致)
-  CASCADE:在父表进行更新/删除时,首先检查记录是否存在外键,存在则同时对外键关联的子表进行相应的更新/删除
-  SET NULL:在父表进行更新/删除时,首先检查记录是否存在外键,存在则将外键关联的字段值设置为null(前提是外键关联字段可以为null)
-  SET DEFAULT:在父表进行更新/删除时,首先检查记录是否存在外键,存在则将外键关联的字段值设置为一个默认值(Innodb不支持)
-  添加外键约束时指定更新行为:
-  ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键字段名) REFERENCES 主表(主表字段名) ON UPDATE CASCADE ON DELETE CASCADE; -- 将更新行为设定为:CASCADE、将删除行为设定为:CASCADE。 -- 指定何种更新/删除行为以实际为准,这里提供设定为CASCADE(方式二)的参考。 -- 除了在修改表时添加外键约束并设定更新/删除行为,还可以在新增表时(方式一)添加并设置。

