MySQL DELETE 表别名问题

版本是mysql 5.6(5.5在这个问题上也一样,已测试)

随手做一个实验(随手拿的一台机子,创表居然0.2s)
mysql> USE test;        
Database changed
mysql> CREATE TABLE test(id int);
Query OK, 0 rows affected (0.21 sec)

mysql> INSERT INTO test VALUES (1);
Query OK, 1 row affected (0.05 sec)

mysql> INSERT INTO test VALUES (2);
Query OK, 1 row affected (0.03 sec)


尝试做使用别名的删除操作:
mysql> DELETE FROM test a    
    -> WHERE a.id=1;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'a 
WHERE a.id=1' at line 1

查了一下5.6的手册:
语法如下,符合sql标准(sql标准也支持 DELETE * FROM table_name)


继续往下翻:


发现官方给出了多表+表别名的DELETE语法。

此处用单表测试:
删除成功。
mysql> DELETE a FROM test a
    -> WHERE a.id=1;
Query OK, 1 row affected (0.04 sec)


mysql> SELECT * FROM test;
+------+
| id   |
+------+
|    2 |
+------+
1 rows in set (0.00 sec)

当然还尝试了一下第二种写法,通过USING(语法很怪……)

mysql> DELETE FROM a USING test a 
    -> WHERE a.id=2;
Query OK, 1 row affected (0.03 sec)

同样删除成功。


作者公众号(持续更新)



请使用浏览器的分享功能分享到微信等