从MySQL表中删除所有记录

67

我正在尝试从一张表中删除所有记录。我的查询语句是:

delete from tableName.

但是它报告了以下错误:

错误代码:1175。您正在使用安全更新模式,而且尝试更新一个表格而没有使用关键列的WHERE子句。要禁用安全模式,请在首选项-> SQL编辑器->查询编辑器中切换该选项并重新连接。

我该如何解决这个问题?


5
可能我漏掉了什么,但错误信息已经告诉你该怎么做了:在首选项 -> SQL编辑器 -> 查询编辑器中切换该选项并重新连接。 - user330315
我正在使用mySQL Workbench,它抛出了这个错误。 - Sami
好的...MySQL Workbench 告诉你如何解决这个问题:在首选项 -> SQL 编辑器 -> 查询编辑器中切换选项并重新连接。 你试过了吗?如果尝试后仍然无法解决,那就标记重新打开。 - Kev
1
这里有两种解决方案 1. 删除表 <tablename> 中所有记录,使条件为 1=1 成立。2. 截断 <tableName>。 - lokeshjain2008
今天我碰到了这个问题,并通过添加限制子句 delete from tableName limit 1000 解决了它,你可以将 1000 替换为表的计数 (select count(*) from tableName)。 - Bug Killer
我从这个并非真正的问题中学到了,mysql 中有一个关于删除时的设置。 - Lealo
2个回答

94

truncate tableName

这就是您要查找的内容。

Truncate会删除表中的所有记录,将其置空。


1
该命令会删除表格,但不会删除表格中的所有记录。 - pg2455
1
@mousecoder 这不正确,它会留下一个空表,而drop则会删除该表。已添加手册链接。 - Thirler
同意。抱歉我的知識有誤。 - pg2455
3
如果启用了外键约束和级联操作,这种方式将无法运行。 - naamadheya
是的...这对我来说失败了,原因如上所述。 - the_mackster

69

这是因为您尝试更新一个没有使用关键列的 WHERE 语句的表。

快速修复方法是在查询之前添加 SET SQL_SAFE_UPDATES=0;:

SET SQL_SAFE_UPDATES=0; 

或者关闭安全更新模式。 编辑->首选项->SQL编辑器->SQL编辑器 移除禁止没有WHERE子句的UPDATE和DELETE语句(安全更新)。

顺便说一下,您可以使用TRUNCATE TABLE tablename;删除所有记录。


值得一提的是,最新版本(以及可能是之前的版本)在使用TRUNCATE TABLE时也会失败。此外,错误仍然相同,但选项在“编辑”->“首选项”->“SQL查询”中(而不是在SQL编辑器中)。 - magallanes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接