我有两个测试数据库db0
和bd1
,分别包含表t0
和t1
。每个表都包含c0
和c1
列,其中c0
的索引为unique
。
图形上,两个表都定义为:
+---------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+------------+------+-----+---------+-------+
| c0 | varchar(1) | YES | UNI | NULL | |
| c1 | varchar(1) | YES | | NULL | |
+---------+------------+------+-----+---------+-------+
我想将行从db0.t0
复制到db1.t1
。指示以下查询:
t0
复制到t1
; c1
设置为123
; c1
; c0
)的行,否则则不同。查询是:
use db1;
insert into t1 (c0, c1)
select c0, 123 from db0.t0
where (db0.t0.c0, db0.t0.c1) not in
(select c0, c1 from db1.t1)
on duplicate key update;
此查询提供SQL语法错误。但是,删除它的最后一行会使MySQL接受语法并执行查询,但是当它遇到具有相同键(c0
)的行时会最终抛出错误,否则会不同(c1
):
use db1;
insert into t1 (c0, c1)
select c0, 123 from db0.t0
where (db0.t0.c0, db0.t0.c1) not in
(select c0, c1 from db1.t1);
查看MySQL INSERT ... SELECT syntax的文档,我似乎没有做错任何事。
发生了什么事?