04数据库约束实战:从入门到精通

感谢黑马程序员提供的免费课程

约束

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

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

常见的几种约束:

注意:约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束。

案例:根据需求,完成表结构的创建

bash 复制代码
CREATE TABLE user(
id int AUTO_INCREMENT PRIMARY KEY COMMENT 'id唯一标识',
name varchar(10) NOT NULL UNIQUE COMMENT '姓名',
age int CHECK(age>20 && age <=120) COMMENT '年龄',
status char(1) DEFAULT '1' COMMENT '状态',
gender char(1) COMMENT '性别')


INSERT INTO user(name,status,gender,age) VALUES ('tom1','1','男',23);
INSERT INTO user(name,status,gender,age) VALUES ('tom2','1','男',13),('tom3','1','女','32');
INSERT INTO user(name,status,gender,age) VALUES (Null,'1','男',23);
INSERT INTO user(name,status,gender,age) VALUES ('tom5',DEFAULT,'男',23);

外键约束

概念:

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

具体来说,外键关联的目标字段需要满足以下条件

  1. 可以是另一个表的主键(PRIMARY KEY)(最常见的情况)
  2. 可以是另一个表中设置了唯一约束(UNIQUE) 的字段

创建外键的两种方式:

1:在创建表时添加外键

CREATE TABLE xx(

...

字段 类型 CONSTRAINT 外键名称 FOREIGN KEY(外键字段名) REFERENCES

主表(主表列名)

...

)

2:使用alter创建外键

ALTER TABLE ADD CONSTRAINT 外键名称 FOREIAGN KEY(外键字段名) REFERENCES 主表(主表列名)
删除外键语法:

ALTER TABEL DROP FOREIGN KEY 外键名;

bash 复制代码
#创建emp01表
create table emp01(
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');
desc emp01;

#插入数据
INSERT INTO emp01 (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);
		
select * from emp01;

#创建外键		
ALTER TABLE emp01 ADD CONSTRAINT fk_emp01_dept_id FOREIGN KEY(dept_id) REFERENCES dept(id); 

#删除外键
ALTER TABLE emp01 DROP FOREIGN KEY fk_emp01_dept_id;

外键约束-删除/更新行为

父表是reference关联的表,子表是外键所在的表

语法:

ALTER TABLE ADD CONSTRAINT 外键名称 FOREIAGN KEY(外键字段名) REFERENCES 主表(主表列名)ON UPDATE 行为 ON DELETE 行为

bash 复制代码
ALTER TABLE emp01 ADD CONSTRAINT fk_emp01_dept_id FOREIGN KEY(dept_id) REFERENCES dept(id) ON UPDATE SET NULL ON DELETE SET NULL; 

ALTER TABLE emp01 ADD CONSTRAINT fk_emp01_dept_id FOREIGN KEY(dept_id) REFERENCES dept(id) ON UPDATE CASCADE ON DELETE CASCADE; 

约束总结:

这是我的个人学习笔记,主要用于记录自己对知识点的理解和梳理。由于目前仍在学习探索阶段,内容中难免存在理解偏差或表述疏漏,恳请各位大佬不吝赐教,多提宝贵意见~ 若有不同看法,欢迎理性交流探讨,感谢包容与指正!

相关推荐
indexsunny1 小时前
互联网大厂Java求职面试实战:微服务与Spring生态全攻略
java·数据库·spring boot·安全·微服务·面试·消息队列
沪漂阿龙1 小时前
别再让数据库“吃”脏数据了!一文讲透MySQL约束,从入门到精通
数据库·mysql
2401_873544923 小时前
使用Python进行PDF文件的处理与操作
jvm·数据库·python
虾..3 小时前
多路复用 --- select系统调用
服务器·数据库·sql
杨云龙UP3 小时前
mysqldump逻辑备份文件恢复总结:全库恢复、单库恢复,一篇讲明白
linux·运维·服务器·数据库·mysql·adb
ybwycx3 小时前
mysql重置root密码(适用于5.7和8.0)
数据库·mysql·adb
色空大师4 小时前
【网站搭建实操(一)环境部署】
java·linux·数据库·mysql·网站搭建
亚历克斯神5 小时前
Flutter for OpenHarmony: Flutter 三方库 mutex 为鸿蒙异步任务提供可靠的临界资源互斥锁(并发安全基石)
android·数据库·安全·flutter·华为·harmonyos
IAUTOMOBILE5 小时前
用Python批量处理Excel和CSV文件
jvm·数据库·python
常利兵5 小时前
Spring项目新姿势:Lambda封装Service调用,告别繁琐注入!
java·数据库·spring