MySQL中带WHERE子句删除全表数据的通用语法咨询
解决MySQL安全模式下删除全表行的问题
以下几种写法可以满足你的需求,既符合安全模式对WHERE子句必须包含主键的要求,又能匹配所有行:
利用主键非空特性:因为主键列默认带有
NOT NULL约束,所以这个条件能匹配表中所有行:DELETE FROM MyTable WHERE MyID IS NOT NULL;这个写法简单高效,适用于所有主键非空的场景(这也是主键的默认规则)。
子查询匹配所有主键值:通过子查询获取表内全部主键值,再用
IN进行匹配:DELETE FROM MyTable WHERE MyID IN (SELECT MyID FROM MyTable);逻辑直白通用,仅在表数据量极大时可能有轻微性能损耗。
范围覆盖所有可能值(仅适用于数值型主键):如果主键是数值类型,可通过范围条件覆盖所有值:
DELETE FROM MyTable WHERE MyID >= 0 OR MyID < 0;但这个写法通用性较差,比如主键为字符串类型时无法使用,优先推荐前两种方案。
你之前尝试的WHERE MyID = ANY和WHERE MyID = *语法错误,原因是ANY必须搭配子查询或值列表使用(比如ANY(SELECT MyID FROM MyTable)),而*在WHERE子句中没有匹配任意值的语法意义。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

