where子句中的mysql unknown列。一个bug?

时间:2015-11-19 14:58:25

标签: mysql sql triggers

可能是什么原因? 在同一个DB上,select语句按预期工作:

select id from line where line.id = 298;

但是以下删除语句失败:

delete from line where line.id = 298;

有错误:

Unknown column 'line_id' in 'where clause'

查询输出:

mysql> delete from line where line.id = 298;
ERROR 1054 (42S22): Unknown column 'line_id' in 'where clause'

mysql> select id from line where line.id = 298;
+-----+
| id  |
+-----+
| 298 |
+-----+
1 row in set (0.00 sec)
mysql> describe line;
+--------------+---------+------+-----+---------+----------------+
| Field        | Type    | Null | Key | Default | Extra          |
+--------------+---------+------+-----+---------+----------------+
| id           | int(11) | NO   | PRI | NULL    | auto_increment |
| service_id   | int(11) | NO   | MUL | NULL    |                |
| src_site_id  | int(11) | NO   | MUL | NULL    |                |
| dest_site_id | int(11) | NO   | MUL | NULL    |                |
+--------------+---------+------+-----+---------+----------------+
4 rows in set (0.01 sec)

2 个答案:

答案 0 :(得分:6)

SHOW TRIGGERS;

如果有人在没有检查构建时触发了触发器(羞辱他,这是一件非常糟糕的事情),那么它会在没有告诉你任何事情的情况下使你的查询失败。

这真的很棘手,因为你无法直接看到错误是触发器相关的,如果你不使用触发器/不知道它们是一些,唯一的方法是在丢弃之后自己重建表

答案 1 :(得分:0)

尝试创建要删除的表的别名:

DELETE FROM line l WHERE l.id = 298

这应该可以正常工作