mysql 建表时at line 1_数据库学习笔记之MySQL(11)

目录

01. 三表复合查询

02. 对比外键约束的作用

03. 添加外键_建表时添加

正文

01. 三表复合查询

从性能角度讲,多表联合查询没有从单表查询后合并性能高
SELECT a.id,a.name,b.tel,c.emailFROM tbl_name1 AS aJOIN tbl_name2 AS bON a.telId=b.idJOIN tbl_name3 AS cON b.emailId=c.idORDER BY a.id DESCLIMIT 0,2;

02. 对比外键约束的作用

新建两个表并测试是否正常查询
// 新建分类表CREATE TABLE tbl_cate(id TINYINT UNSIGNED AUTO_INCREMENT KEY,cateName VARCHAR(50) NOT NULL UNIQUE,cateDesc VARCHAR(100) NOT NULL DEFAULT '');// 插入数据INSERT tbl_cate(cateName) VALUES('本地'),('时政'),('财经'),('体育');// 新建新闻表CREATE TABLE tbl_news(id INT UNSIGNED AUTO_INCREMENT KEY,title VARCHAR(100) NOT NULL UNIQUE,content VARCHAR(1000) NOT NULL,cateId TINYINT UNSIGNED NOT NULL);// 插入数据INSERT tbl_news(title,content,cateId) VALUES('new1','new11111',1),('new2','new22222',1),('new3','new33333',4),('new4','new44444',2),('new5','new55555',3);// 测试查询tbl_news id title content,tbl_cate cateNameSELECT a.id,a.title,a.content,b.cateNameFROM tbl_news AS aJOIN tbl_cate AS bON a.cateId=b.id;
如果此时将分类表中的时政类新闻删除掉,而新闻表中的分类id信息还是存在的,即使我们此时往新闻中添加一个非法数据(即分类表中没有的信息)也是可以正常添加的
// 测试非法数据,也可以正常添加INSERT news(title,content,cateId) VALUES('a6','aaaa6',45);
如果要保持数据的完整性和一致性就需要使用——外键,外键的主要作用就是保持数据的完整性和一致性。

03. 添加外键_建表时添加

重新创建两个表并添加外键。

添加外键有两种方式,一种是建表时添加,一种是动态添加。

// 建表时添加外键 格式[CONSTRAINT 外键名称] FOREIGN KEY(字段名称) REFERENCES 主表(字段名称)// 新建分类表CREATE TABLE tbl_cate(id TINYINT UNSIGNED AUTO_INCREMENT KEY,cateName VARCHAR(50) NOT NULL UNIQUE,cateDesc VARCHAR(100) NOT NULL DEFAULT '')ENGINE=INNODB;// 新建新闻表// 如果没有指定外键名称,创建时会自动添加一个外键名称CREATE TABLE tbl_news(id INT UNSIGNED AUTO_INCREMENT KEY,title VARCHAR(100) NOT NULL UNIQUE,content VARCHAR(1000) NOT NULL,cateId TINYINT UNSIGNED NOT NULL,FOREIGN KEY(cateId) REFERENCES tbl_cate(id))ENGINE=INNODB;// 插入数据INSERT tbl_cate(cateName) VALUES('本地'),('时政'),('财经'),('体育');// 插入数据INSERT tbl_news(title,content,cateId) VALUES('new1','new11111',1),('new2','new22222',1),('new3','new33333',4),('new4','new44444',2),('new5','new55555',3);//测试非法记录,此时插入会不成功,报错提示INSERT tbl_news(title,content,cateId) VALUES('b1','bbbb1',6);//测试删除父表中的记录,此时 因为子表中有外键约束,所以会报错,不能删除DELETE FROM tbl_cate WHERE id=1;//更新也不会成功UPDATE tbl_cate SET id=10 WHERE id=1;//添加是可以的INSERT tbl_cate(cateName) VALUES('汽车');//修改更新刚刚添加的 汽车改为历史,此时时可以成功的,因为子表中没有使用这个分类UPDATE tbl_cate SET cateName='历史' WHERE id=5;UPDATE tbl_cate SET id=50 WHERE cateName='历史';

写在最后

本文是在学习MySQL过程中整理的相关笔记,是该系列的第十一篇文章,以上内容纯手敲,可能有手误的地方,也可能有错误的地方,希望大家一起指正和见谅。最后,希望与每一个努力的人同行,一起加油!!!

ff13d47cc9fb6edd930e2d4b7634f806.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值