我正在浏览官方MySQL 文档以了解DELETE子句。此页面说明
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]
Run Code Online (Sandbox Code Playgroud)
我可以从这个WHERE看到,ORDER BY和LIMIT是允许的,但没有提到IN
因此,以下有效命令
DELETE FROM WHERE column = z OR column = y OR column = x OR column = w
Run Code Online (Sandbox Code Playgroud)
但是我写了下面的命令,它执行得很好,和上面的完全一样,但看起来更好。(也可能执行得更快)
DELETE FROM table WHERE column IN (z,y,x,w)
Run Code Online (Sandbox Code Playgroud)
我可以这样做吗?我想知道在这种情况下它是否有效,但其他情况会失败?另外,如果这很好,文档不应该说明吗?
是的,您可以IN()
在语句的WHERE
子句中使用DELETE
。
没有“IN
子句”——IN()
只是一个比较运算符,可能稍微伪装成更复杂的东西。
http://dev.mysql.com/doc/refman/5.6/en/comparison-operators.html#function_in
为了说明IN()
真正在做什么,请单独考虑这些示例。
mysql> SELECT 1 IN (2,3,4); -- should be false
+--------------+
| 1 IN (2,3,4) |
+--------------+
| 0 | -- is indeed false
+--------------+
1 row in set (0.00 sec)
mysql> SELECT 1 IN (2,1,4); -- should be true
+--------------+
| 1 IN (2,1,4) |
+--------------+
| 1 | -- is indeed true
+--------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
...而且,正如@ypercube 所指出的,“where_condition
是一个表达式,对于要删除的每一行,它的计算结果为真”。
归档时间: |
|
查看次数: |
14047 次 |
最近记录: |