我在 mysql 终端中运行了一个错误的删除查询,我很快就终止了。但是,我想知道可能的结果。
delete from table where 123
代替
delete from table where id=123
我在 mysql 终端中运行了一个错误的删除查询,我很快就终止了。但是,我想知道可能的结果。
delete from table where 123
代替
delete from table where id=123
它将删除表的所有行。MySQL 将 1 到 9 的所有整数视为真,将 0 视为假。所以现在 where 子句将给出布尔值的真实结果。
WHERE 子句需要一个布尔表达式(TRUE 或 FALSE)。如果表达式不是boolean,它将被转换为数值。然后任何不等于0(零)的数值都被认为是 TRUE。零或 NULL 等价于 FALSE。
由于123是一个非零数值,WHERE 123相当于WHERE 1或WHERE TRUE(甚至没有 WHERE 子句),在您的情况下意味着:删除表中的所有行。
除此之外:一些客户端的设置不允许像这样的删除语句,并希望在 WHERE 子句中使用主键。引入这些设置是为了避免这种(错字)错误。要删除所有行,您需要编写WHERE id=id.
要查看将删除的查询,您可以运行相同的查询但使用select子句,例如:
select * from table where 123
在这种特殊情况下,它必须选择所有行而不进行任何过滤。