1. 概念
约束是作用域表中字段上的规则,用于限制存储子啊表中的数据
2. 目的
保证数据库中数据的正确、有效性和完整性
3. 分类
注意:
约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束。
根据需求,完成表结构的创建,需求如下图所示:
1 2 3 4 5 6 7 | CREATE TABLE user ( id int primary key auto_increment comment '主键' , name varchar (10) not null unique comment '姓名' , -- age int check ( age > 0 && age <= 120 ) comment '年龄', -- 5.6.22CHECK 约束报错,百度提示MySQL 5.6不支持CHECK约束 status char (1) default '1' comment '状态' , gerder char (1) comment '性别' )comment '用户表' ; |
4. 外键约束
4.1 概念
外键是用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性。
注意:
目前上述的两张表,在数据库层面,并未建立外键关联,所以是无法保证数据的一致性和完整性的
4.2 准备数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | -- dept表 CREATE TABLE dept( id INT AUTO_INCREMENT COMMENT 'ID' PRIMARY KEY , name VARCHAR (50) NOT NULL COMMENT '部门名称' )COMMENT '部门表' ; INSERT INTO dept (id, name ) VALUES (1, '研发部' ),(2, '市场部' ),(3, '财务部' ),(4, '销售部' ),(5, '总经办' ); -- employee表 CREATE TABLE employee ( 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 '员工表' ; INSERT INTO employee (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); |
4.3 添加外键
1 2 3 4 5 6 7 8 9 10 11 12 | -- 语法 添加外键 CREATE TABLE 表名( 字段名 数据类型 ... [ CONSTRAINT ][外键名称] FOREIGN KEY (外键字段名) REFERENCES 主表(主表列名) ); ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名) REFERENCES 主表(主表列名); -- 案例: ALTER TABLE employee ADD CONSTRAINT FK_employee_dept_id FOREIGN KEY (dept_id) REFERENCES dept(id); |
4.4 删除外键
1 2 3 4 | -- 语法 ALTER TABLE 表名 DROP FOREIGN KEY 外键名称; -- 案例 ALTER TABLE employee DROP FOREIGN KEY FK_employee_dept_id; |
4.5 删除/更新行为
1 2 3 4 5 6 7 | -- 语法 ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名) REFERENCES 主表(主表列名) ON UPDATE CASCADE ON DELETE CASCADE ; -- 案例 -- 父表更新/删除行为时,子表跟随变更 ALTER TABLE employee ADD CONSTRAINT FK_employee_dept_id FOREIGN KEY (dept_id) REFERENCES dept(id) ON UPDATE CASCADE ON DELETE CASCADE ; -- 父表更新/删除行为时,子表设置空值 ALTER TABLE employee ADD CONSTRAINT FK_employee_dept_id FOREIGN KEY (dept_id) REFERENCES dept(id) ON UPDATE SET NULL ON DELETE SET NULL ; |
分类:
MySQL
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
2020-02-02 HTTP