sql能否批量删除多个行

Navicat如何批量删除特定数据

哎,你问我用Navicat批量删除数据要注意什么?上次帮同事做这个,确实经历了很多坑。
让我告诉你吧:
---
场景:老板半夜打电话给我,让我删除users表中所有status='inactive'的条目。
我很担心
我的操作和陷阱笔记:
1 SQL删除数据最快,但最容易产生问题。
我直接在Navicat SQL窗口中输入DELETE FROMusers WHERE status='inactive'并回车……突然发现表中的所有用户都消失了!吓死我了!快速Ctrl+Z取消,后来我发现WHERE子句还没有添加。
后来我在教导初学者的时候,我强调:
先在测试库中运行:将SQL复制到测试环境中。
SELECT FROM users WHERE status='inactive' 检查删除是否正确。

使用LIMIT控件:首先尝试DELETE FROM users WHERE status='inactive' LIMIT 1 00看看效果。
如果没有问题,再添加一个
2 大小写问题!很多初学者都忽略了这一点 此前,实习生已经删除了数据,只更改了船体。
例如,WHERE status='INACTIVE',但实际数据为 status='inactive'。
结果,没有数据被删除。
我的建议:
使用特定于数据库的比较方法,例如 MySQL,使用 WHERE LOWER(status)='inactive'。

或者直接使用普通的WHERE RLIKE 'i[n]active'状态来避免错误
3 外键约束是一个绊脚石 我删除orders表数据并直接删除users表后,遇到错误信息:无法删除或更新父行:外键约束失败。
血与泪的教训:
首先使用SELECT FROM order WHERE user_id IN(SELECT id FROMusers WHERE status='inactive')查找相关数据。

或者暂时禁用外键(但一定要使用 ALTER TABLE DISABLE KEYS 和 ALTER TABLE ENABLE KEYS 命令;不要对配置文件进行硬更改来恢复)
4 批量删除是生存法则 2 02 3 年我帮助了他们上海某商场删除了2 00万条广告贴,删除后CPU占用率下降到2 00%。
正确姿势:
使用Navicat脚本运行,每次删除2 000个元素,添加COMMIT;发送
或者编写一个Python脚本并运行DELETE FROM table LIMIT 2 000;循环
---
循环运动提醒: 以前,Buddy 使用 GUI 选择用户组并单击“删除”。
结果管理员账号也被删除了……所以,提醒一下:
适合小批量的图形,基于SQL的超过5 000个句子。

请务必注意 Navicat 右下角指示的受影响行数。
不要闭上眼睛或移开眼睛。

最后的想法: 一定要说三遍“备份”!后退!后退!后退! 要么使用开始交易;完成交易或保留重要数据。
如果一家公司仍在使用过时的Navicat1 2 版本,处理外键约束会出现更多问题。
建议直接更新。

无论如何,都由你决定。
当我删除了我的数据后,我的老板称赞了我的表现,直到他发现他最喜欢的营销帐户消失了......