离开这个答案,我想知道为什么词法分析器允许它在这个语句中一直深入到几何语法INSERT
CREATE TABLE foo ( x varchar(255) );
> INSERT INTO foo VALUES ( x='foo' );
Query OK, 1 row affected (0.01 sec)
Run Code Online (Sandbox Code Playgroud)
我知道这是不对的,正如上面的答案表明应该是这样INSERT INTO tbl SET
,但是发生了什么?MySQL 是如何解释的?在 PostgreSQL 中,这种语法被拒绝。
test=# CREATE TABLE foo ( x varchar(255) );
INSERT INTO foo VALUES ( x='foo' );
Run Code Online (Sandbox Code Playgroud)
PostgreSQL 将其解释为列引用并出错,进一步提供提示
ERROR: column "x" does not exist
LINE 1: INSERT INTO foo VALUES ( x='foo' );
HINT: There is a column named "x" in table …
Run Code Online (Sandbox Code Playgroud)