日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

子查询更新操作的坑

發(fā)布時(shí)間:2025/3/21 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 子查询更新操作的坑 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

子查詢我相信大部分人都寫過,但是昨天遇到一個(gè)比較坑的問題,由于有較好的備份,很短時(shí)間就恢復(fù)了誤操作數(shù)據(jù),但是這個(gè)問題值得分享。
首先建立如下測試表:
CREATE TABLE course (
student_id INT(11),
course VARCHAR(20)
);
INSERT INTO course VALUES ('1', '測試1');
INSERT INTO course VALUES ('2', '測試2');
INSERT INTO course VALUES ('3', '測試3');

CREATE TABLE student (
id INT(11),
name VARCHAR(20)
) ;
INSERT INTO student VALUES ('1', 'jiate');
INSERT INTO student VALUES ('2', 'haoshen');
INSERT INTO student VALUES ('3', 'leishen');
INSERT INTO student VALUES ('4', 'tetui');

現(xiàn)在我們執(zhí)行如下查詢操作:
SELECT FROM student WHERE id IN (SELECT id FROM course)

這個(gè)結(jié)果很明顯,多了一條。而在昨天,我們開發(fā)寫的是個(gè)update 操作,也是就:update student set name='特腿' where id in (select id from course) 本來更新1000條的數(shù)據(jù),開發(fā)直接誤更新了40萬條。
仔細(xì)排查后,發(fā)現(xiàn)剛才兩條sql發(fā)現(xiàn) course 中根本就不存在id列,那么剛才那兩條sql為啥沒有拋出id報(bào)錯(cuò),而是直接全表匹配了?
我們 desc extended 看看優(yōu)化器究竟干了什么?
DESC EXTENDED SELECT FROM student WHERE id IN (SELECT id FROM course)

SHOW WARNINGS


第一行1276 大意是說第二個(gè)查詢中的 id 列在第一個(gè)表中被解析到
第二行就是解析器解析后的sql,我們貼出來看看
SELECT
yhtest.student.id AS id,
yhtest.student.name AS name
FROM
yhtest.student semi
JOIN (yhtest.course)
WHERE (
yhtest.student.id = yhtest.student.id
)

也就是說我們這個(gè)子查詢中的id 列被解析為了主表的id 列,這樣,where 條件是一個(gè)恒成立的條件,所以導(dǎo)致我們的查詢過結(jié)果是a表的全表結(jié)果,而這也是這樣的查詢不拋錯(cuò)的原因。
子查詢中的字段,首先會(huì)在子查詢中查找,1)如果子查詢中沒該字段,則會(huì)去外層主表查找,如果能找到,也不會(huì)拋錯(cuò)! 2)如果子查詢和主表中都沒有該字段,則會(huì)拋錯(cuò)。
這其實(shí)是一個(gè)比較不理想的結(jié)果,如果我們無意中錯(cuò)誤是update操作,那么這個(gè)結(jié)果太糟糕。
這個(gè)我們提了兩個(gè)醒:
1)做數(shù)據(jù)庫操作之前,最好都備份
2)平時(shí)寫sql的時(shí)候,子查詢盡量都寫成表關(guān)聯(lián)的形式,表關(guān)聯(lián)形式,如果出現(xiàn)這種錯(cuò)誤,會(huì)直接拋出錯(cuò)誤。子查詢形式,雖然好懂,一目了然,但是性能一般不大好,再一個(gè),如果掉進(jìn)了以上這種誤更新坑中......
3)在不同版本的數(shù)據(jù)庫對(duì)于子查詢的優(yōu)化操作也是不盡相同,性能差異在不同版本之間還是比較明顯的。

轉(zhuǎn)載于:https://blog.51cto.com/11286233/2059003

總結(jié)

以上是生活随笔為你收集整理的子查询更新操作的坑的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日本成人高清 | 国产精品久久77777 | 精品久久99 | 永久免费av无码网站性色av | 久久免费观看视频 | 成人久久精品人妻一区二区三区 | 色偷偷91| 国产日韩在线免费观看 | 人人干人人艹 | 色欧美视频| 91久久精品日日躁夜夜躁欧美 | 亚洲综合一区在线观看 | 成人免费在线视频 | 黄色网免费观看 | 国产精品16p | 日日干夜 | 精品中文字幕一区二区 | 夜夜cao | 国产精品免费入口 | 成人一二区 | 丝袜一区二区三区 | 成人免费毛片aaaaaa片 | 狠狠狠狠狠狠狠 | 亚洲三级影院 | 亚洲aⅴ乱码精品成人区 | 韩国19主播内部福利vip | 一区二区三区视频在线播放 | 美女脱了内裤喂我喝尿视频 | 国产三极片 | 性饥渴的农村熟妇 | 亚洲一区二区三区av无码 | 强行无套内谢大学生初次 | 日韩中文免费 | 91成人精品一区在线播放 | av女人的天堂 | 精品久久久久久亚洲综合网站 | 国产精品丝袜黑色高跟鞋的设计特点 | 亚洲av无码一区二区三区人 | 在线免费福利视频 | 97精品人人妻人人 | 青草青视频 | av国产在线观看 | 日韩午夜网站 | 伊人三级 | 精品少妇av | 日韩精品一二 | 国内精品久久99人妻无码 | 九色91丨porny丨丝袜 | 在线永久看片免费的视频 | 青青草视频 | 国产成人无码精品久久久久 | 视频在线观看一区 | 中文字幕在线观看av | 免费在线不卡av | 少妇无内裤下蹲露大唇视频 | 日韩av高清 | 日韩综合| 欧美精品在欧美一区二区少妇 | 大又大又粗又硬又爽少妇毛片 | 成人在线视频一区二区三区 | 日本学生初尝黑人巨免费视频 | 久久美女av | 国产在线拍揄自揄拍无码 | 黄色av导航| 国产黄色精品视频 | 国产精品二区视频 | 亚洲高清在线观看视频 | 日韩丰满少妇无码内射 | 成 年 人 黄 色 大 片大 全 | 国产精品久久一区 | 久久丁香| 欧美成人hd | 国精产品乱码一区一区三区四区 | 豆花在线观看 | 国产综合无码一区二区色蜜蜜 | 欧美片网站yy | 久久久久久天堂 | 韩国午夜av | 色xxxxxx| 精品无码人妻少妇久久久久久 | 亚洲一区二区三区在线观看视频 | proumb性欧美在线观看 | 人妻在线日韩免费视频 | 欧美日韩另类视频 | 91精品久久久久久久99蜜桃 | 精品欧美黑人一区二区三区 | 久久午夜剧场 | 日韩女优在线播放 | 国产乱国产 | 香港三级日本三级三69 | 黄色视屏在线看 | 日韩有码一区二区三区 | a天堂在线| 久久资源365 | 男人与雌性宠物交啪啪 | 一级特黄a | 国产精品s | 日韩免费电影一区 | 精品人妻一区二区三区换脸明星 |