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

相关推荐
用户861782773651817 分钟前
MySQL 8.0从库宕机排查实录:中继日志膨胀引发的连锁故障复盘
mysql
Kapaseker1 小时前
一杯美式搞懂 Any、Unit、Nothing
android·kotlin
黄林晴1 小时前
你的 Android App 还没接 AI?Gemini API 接入全攻略
android
恋猫de小郭11 小时前
2026 Flutter VS React Native ,同时在 AI 时代 VS Native 开发,你没见过的版本
android·前端·flutter
冬奇Lab12 小时前
PowerManagerService(上):电源状态与WakeLock管理
android·源码阅读
NineData16 小时前
NineData智能数据管理平台新功能发布|2026年1-2月
数据库·sql·数据分析
IvorySQL17 小时前
双星闪耀温哥华:IvorySQL 社区两项议题入选 PGConf.dev 2026
数据库·postgresql·开源
BoomHe18 小时前
Now in Android 架构模式全面分析
android·android jetpack
ma_king20 小时前
入门 java 和 数据库
java·数据库·后端
jiayou641 天前
KingbaseES 实战:审计追踪配置与运维实践
数据库