delete - mysql刪除最近幾條記錄怎么這么難
問題描述
需求
刪除最近添加的幾條記錄
select * from delete_test order by create_time desc;+----+------+---------------------+| id | code | create_time |+----+------+---------------------+| 6 | fff | 2016-06-17 22:19:04 || 5 | eee | 2016-06-17 22:18:59 || 4 | ddd | 2016-06-17 22:18:53 || 3 | ccc | 2016-06-17 22:18:48 || 2 | bbb | 2016-06-17 22:18:42 || 1 | aaa | 2016-06-17 22:18:37 |+----+------+---------------------+#嘗試一 失敗delete from delete_test where code in (select code from delete_test order by create_time desc limit 3);ERROR 1235 (42000): This version of MySQL doesn’t yet support ’LIMIT & IN/ALL/ANY/SOME subquery’#嘗試二 失敗delete from delete_test a where exists (select code from delete_test b where a.code = b.code order by b.create_time desc limit 3);ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ’a where exists (select code from delete_test b where a.code = b.code order by b’ at line 1#嘗試三 失敗delete from delete_test a, (select code from delete_test order by create_time desc limit 3) b where a.code = b.code;ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ’a, (select code from delete_test order by create_time desc limit 3) b where a.co’ at line 1#嘗試四 失敗 但明明code字段是唯一索引啊(UNIQUE KEY `code` (`code`))delete a from delete_test a, (select code from delete_test order by create_time desc limit 3) b where a.code = b.code;ERROR 1175 (HY000): You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column#嘗試五 失敗 改用join 顯式使用id主鍵 delete a from delete_test a join (select code from delete_test order by create_time desc limit 3) b on a.code = b.code where a.id>0;ERROR 1175 (HY000): You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column#然后重新連接會話 沒有使用--safe-updatesmysql -uroot -p123456#刪除成功delete a from delete_test a, (select code from delete_test order by create_time desc limit 3) b where a.code = b.code and a.id>0;Query OK, 3 rows affected (0.00 sec)# 驗證已成功刪除select * from delete_test order by create_time desc;+----+------+---------------------+| id | code | create_time |+----+------+---------------------+| 3 | ccc | 2016-06-17 22:18:48 || 2 | bbb | 2016-06-17 22:18:42 || 1 | aaa | 2016-06-17 22:18:37 |+----+------+---------------------+
參考文檔http://stackoverflow.com/questions/3331992/how-to-delete-from-multiple-tables-in-mysql
問題解答
回答1:真的沒有必要這么復雜 直接
delete from delete_test order by create_time desc limit 3;
即可。
回答2:分兩步刪可以嗎,查主鍵,通過主鍵刪除
回答3:delete from delete_test where code in (select code from delete_test order by create_time desc) limit 3;
相關文章:
1. node.js - nodejs+express+vue2. javascript - 我的站點貌似被別人克隆了, google 搜索特定文章,除了域名不一樣,其他的都一樣,如何解決?3. java - web端百度網盤的一個操作為什么要分兩次請求服務器, 有什么好處嗎4. 數據庫 - Mysql的存儲過程真的是個坑!求助下面的存儲過程哪里錯啦,實在是找不到哪里的問題了。5. javascript - 如何獲取未來元素的父元素在頁面中所有相同元素中是第幾個?6. python - 如何把152753這個字符串轉變成時間格式15:27:537. 使用mysql命令行連接遠程數據庫host跳轉8. javascript - onclick事件點擊不起作用9. javascript - webpack-dev-server和webpack沖突嗎10. python 字符串匹配問題

網公網安備