MySQL删除查询忘记Id约束

时间:2019-04-02 10:06:30

标签: mysql

我在mysql终端中运行了一个错误的删除查询,该查询很快终止了。但是,我想知道可能的结果。

delete from table where 123

代替

delete from table where id=123

3 个答案:

答案 0 :(得分:1)

WHERE子句需要一个 boolean 表达式(为TRUE或FALSE的值)。如果表达式不是 boolean ,它将被强制转换为数字值。然后,任何不等于0(零)的数值都被认为是TRUE。零或NULL等同于FALSE。

由于123是一个非零数值,因此WHERE 123等效于WHERE 1WHERE TRUE(甚至没有WHERE子句),在您的情况下表示:删除表中的所有行。

此外:有些客户端具有设置,这些设置不允许这样的删除语句,并且希望在WHERE子句中使用主键。引入这些设置是为了避免此类错误(典型错误)。要删除所有行,则需要编写WHERE id=id

答案 1 :(得分:1)

它将删除表的所有行。 MySQL将1到9之间的所有整数都视为true,将0视为false。因此,现在where子句将给出布尔值的真实结果。

答案 2 :(得分:0)

要查看要删除的查询,可以运行相同的查询,但要使用select子句,例如:

select * from table where 123

在这种情况下,它必须选择所有行,而无需进行任何过滤。