MySQL record 05 part

外键
注意,外键所在的表一般被称为从表,被引用的表被称为主表

直接删除主表会报错,因为主表被从表(有外键的那个表)所引用,所以,删除主表(被引用数据的表)之前,要先删除子表(外键所在的表),然后再去删除主表,就不会报错了。




图中的注意第二条,所示外键名是不允许加引号的,不管是单引号也好还是双引号也好,都不允许。

通过外键去引用别的表中对应列的数据,之所以叫外键,是因为通过此键可以外接到其他表中的数据。

september2024the11thWednsday


创建外键语句:

ALTER TABLE student ADD CONSTRAINT fk_id FOREIGN KEY(gid) REFERENCES

grade(id);

创建外键后,通过表创建语句查看表的详细结构,结果如下:

CREATE TABLE student ( sid int NOT NULL, sname varchar(36)

DEFAULT NULL, gid int NOT NULL, PRIMARY KEY (sid), KEY
fk_id (gid), CONSTRAINT fk_id FOREIGN KEY (gid) REFERENCES
grade (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

COLLATE=utf8mb4_0900_ai_ci

csharp 复制代码
创建外键时,关于外键的语句:
KEY `fk_id` (`gid`),   
CONSTRAINT `fk_id` FOREIGN KEY (`gid`) 
REFERENCES `grade` (`id`)

删除外键语句:

ALTER TABLE student DROP FOREIGN KEY fk_id;

删除外键后,通过表创建语句查看表的详细结构,结果如下:

CREATE TABLE student ( sid int NOT NULL, sname varchar(36)

DEFAULT NULL, gid int NOT NULL, PRIMARY KEY (sid), KEY
fk_id (gid) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

COLLATE=utf8mb4_0900_ai_ci

cpp 复制代码
删除外键后,剩下的关于外键的语句:
KEY `fk_id` (`gid`) 

添加外键约束的参数说明:


cascade,小瀑布;层叠

这里可以理解为级联,意思是,改动一个表,另一个表也会被影响,注意,这里的改动,分为两个方向,一个是删除,另一个是更新,可以分别指定,即可以单独只指定删除,或者单独只指定更新,也可以同时指定删除和更新 。

例如,指定删除为级联(cascade)操作 ,指定更新为约束(restrict)操作

september2024the14thSaturday

删除外键



关联表的关系:

September15th2024Sunday


交叉连接:


本例交叉连接的结果是:

把所有的员工放入所有的部门中,4个部门中每个部门都有4个员工,所以是4x4=16条数据记录,

也可以从员工的角度看,那就是,每个员工都同时归属于4个部门,


内连接

employee:

department:

内连接查询:

SELECT employee.name,department.dname FROM department JOIN employee ON department.did=employee.did;

注意,在日常的查询语句中,各个字段之间一定要加上逗号,否则查询报错,如下:

SELECT employee.name,department.dname FROM department JOIN employee ON department.did=employee.did;

字段间有逗号的,语句会顺利执行,

SELECT employee.name department.dname FROM department JOIN employee ON department.did=employee.did;

字段间没有逗号的,语句执行时会报错,


外连接查询:

左外连接,以左表为主,
示为空

右外连接,以右表为主,

不管左外还是右外,

1.谁在右侧,就以谁为主,

2.符合 ON 条件的记录,主表里的统统显示出来,从表规则是有的就显示,没有的要标记为NULL


复合条件连接查询:

举例:

SELECT employee.name,employee.age,department.dname FROM department JOIN employee ON department.did=employee.did ORDER BY age;


子查询

带有子查询的select语句,子查询会被小括号包起来,将先进行子查询,然后以拿到的结果作为过滤条件再继续查询,子查询先儿子再爸爸,

注意,子查询必须被小括号包围。

september2024the17thTuesday

相关推荐
阿华的代码王国2 分钟前
【JavaEE】多线程编程引入——认识Thread类
java·开发语言·数据结构·mysql·java-ee
Z_W_H_8 分钟前
【PostgreSQL】安装及使用(Navicat/Arcgis),连接(C#)
数据库·postgresql
豆姐姐15 分钟前
金九银十,分享一波用例设计、数据库、编程笔试题!
自动化测试·数据库·测试用例·软件测试面试
晨春计15 分钟前
【git】
android·linux·git
计算机程序设计开发17 分钟前
计算机毕业设计公交站点线路查询网站登录注册搜索站点线路车次/springboot/javaWEB/J2EE/MYSQL数据库/vue前后分离小程序
数据库·vue.js·spring boot·课程设计·计算机毕业设计
qq_353233538923 分钟前
【原创】java+springboot+mysql高校社团网系统设计与实现
java·spring boot·mysql
布洛芬颗粒1 小时前
JAVA基础面试题(第二十二篇)MYSQL---锁、分库分表!
java·开发语言·mysql
waterHBO1 小时前
ER 图 Entity-Relationship (ER) diagram 101 电子商城 数据库设计
数据库
青云交1 小时前
大数据新视界 --大数据大厂之Kubernetes与大数据:容器化部署的最佳实践
数据库·kubernetes·容器编排·资源管理·大数据处理·扩展性、故障恢复·存储持久化·监控、日志管理、性能提升
标标大人1 小时前
c语言中的局部跳转以及全局跳转
android·c语言·开发语言