MySQL刪除數(shù)據(jù)1093錯(cuò)誤
現(xiàn)象:在進(jìn)行更新和刪除操作的時(shí)候,條件語句里面有子查詢語句,此時(shí)會(huì)報(bào)1093錯(cuò)誤!
錯(cuò)誤日志:1093 - You can’t specify target table ‘t_suer_study_video’ for update in FROM clause
首先根據(jù)條件來查詢
SELECT * FROM t_suer_study_video WHERE video_course_id =207;
如下圖所求,其中有一個(gè)用戶有兩條數(shù)據(jù),train_id 為 null 的那一條數(shù)據(jù)為重復(fù)數(shù)據(jù),我需要?jiǎng)h除的。
線上環(huán)境中,像上頁面這樣的數(shù)據(jù),不小心產(chǎn)生了幾千條,是寫的程序的一個(gè)bug導(dǎo)致的問題,所以我需要批量刪除,先按用戶ID分組查詢一下:
SELECT user_id, COUNT(*) FROM t_suer_study_video WHERE video_course_id =207 GROUP BY user_id;
如下圖,數(shù)量為2的用戶的數(shù)據(jù)就是需要處理的
然后篩選分組的用戶數(shù)據(jù)
SELECT user_id, COUNT(*) FROM t_suer_study_video WHERE video_course_id = 207 GROUP BY user_id HAVING COUNT(*) > 1;
我這測(cè)試數(shù)據(jù),只有一個(gè)用戶的是重復(fù)的,實(shí)際中是有多個(gè)用戶的
然后刪除重復(fù)的,就是將上述分組查詢出來的重復(fù)用戶的ID作為條件來刪除
DELETE FROM t_suer_study_video WHERE video_course_id = 207 AND train_id IS NULL AND user_id IN ( SELECT user_id FROM t_suer_study_video WHERE video_course_id = 207 GROUP BY user_id HAVING COUNT(*) > 1 );
出現(xiàn)錯(cuò)誤 1093 - You can’t specify target table ‘t_suer_study_video’ for update in FROM clause
原因:在進(jìn)行更新和刪除操作的時(shí)候,條件語句里面有子查詢語句,此時(shí)會(huì)報(bào)1093錯(cuò)誤!,MySQL在進(jìn)行讀取數(shù)據(jù)的時(shí)候 會(huì)加讀鎖(共享鎖),其他請(qǐng)求可以再次加上讀鎖,但是不能加寫鎖,(如果在讀的過程中,又有其他線程進(jìn)行了更新操作,就會(huì)導(dǎo)致當(dāng)前線程讀取到的數(shù)據(jù)不是最新的數(shù)據(jù),這就是不可重復(fù)讀現(xiàn)象)。因此不支持對(duì)數(shù)據(jù)更新的同時(shí)進(jìn)行查詢操作,加了讀鎖 就不允許加寫鎖。
解決辦法:外面多嵌套一層查詢,原先的查詢作為子查詢。
DELETE FROM t_suer_study_video WHERE video_course_id = 207 AND train_id IS NULL AND user_id IN ( SELECT a.user_id FROM ( SELECT user_id FROM t_suer_study_video WHERE video_course_id = 207 GROUP BY user_id HAVING COUNT(*) > 1 ) a );
刪除成功
到此這篇關(guān)于MySQL刪除數(shù)據(jù)1093錯(cuò)誤的文章就介紹到這了,更多相關(guān)MySQL 1093錯(cuò)誤內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于MySql數(shù)據(jù)庫Update批量更新不同值的實(shí)現(xiàn)方法
這篇文章主要介紹了關(guān)于MySql數(shù)據(jù)庫Update批量更新不同值的實(shí)現(xiàn)方法,數(shù)據(jù)庫管理系統(tǒng)可以通過SQL管理數(shù)據(jù)庫,定義和操作數(shù)據(jù),維護(hù)數(shù)據(jù)的完整性和安全性,需要的朋友可以參考下2023-05-05