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;
我這測試數(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ì)加讀鎖(共享鎖),其他請求可以再次加上讀鎖,但是不能加寫鎖,(如果在讀的過程中,又有其他線程進(jìn)行了更新操作,就會(huì)導(dǎo)致當(dāng)前線程讀取到的數(shù)據(jù)不是最新的數(shù)據(jù),這就是不可重復(fù)讀現(xiàn)象)。因此不支持對數(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mysql查詢獲得兩個(gè)時(shí)間的時(shí)間差方式
這篇文章主要介紹了mysql查詢獲得兩個(gè)時(shí)間的時(shí)間差方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05
Mysql DNS反向解析導(dǎo)致連接超時(shí)過程分析(skip-name-resolve)
從其它地方連接MySQL數(shù)據(jù)庫的時(shí)候,有時(shí)候很慢。慢的原因有可能是MySQL進(jìn)行反向DNS解析造成的,這里簡單介紹下原理,需要的朋友可以參考下2013-03-03
MYSQL 隨機(jī) 抽取實(shí)現(xiàn)方法及效率分析
MYSQL的隨機(jī)抽取實(shí)現(xiàn)方法。舉個(gè)例子,要從tablename表中隨機(jī)提取一條記錄,大家一般的寫法就是:SELECT * FROM tablename ORDER BY RAND() LIMIT 1。2009-05-05
淺析一個(gè)MYSQL語法(在查詢中使用count)的兼容性問題
本篇文章是對MYSQL語法(在查詢中使用count)的兼容性問題進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-07-07
MySQL常用的日期時(shí)間函數(shù)匯總(附實(shí)例)
日期時(shí)間處理對大家來說應(yīng)該都不陌生了,下面這篇文章主要給大家介紹了關(guān)于MySQL常用的日期時(shí)間函數(shù),文中通過圖文介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用mysql具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2023-03-03
MySQL Group Replication(MGR)集群部署實(shí)現(xiàn)自動(dòng)故障切換問題記錄
文章詳細(xì)介紹了MGR的配置步驟、環(huán)境規(guī)劃、自動(dòng)故障切換驗(yàn)證以及生產(chǎn)環(huán)境優(yōu)化和常見問題解決,感興趣的朋友跟隨小編一起看看吧2026-01-01
ARM64架構(gòu)下安裝mysql5.7.22的全過程
這篇文章主要介紹了ARM64架構(gòu)下安裝mysql5.7.22的全過程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-07-07

