我有4个表,一个表包含需要分配给其他3个表的所有值,具体取决于一列的值。
所以我想在重复键更新上进行插入,但是我面临的问题是我无法在主表上创建与其他3个表相同的键。
如果我这样做,主表(a,b,c,d)上的示例键,而子表上的键将是(a,b,c),该查询是否仍然有效?
我正在使用mysql 5.6
我确实在本地计算机上尝试过,但是虽然我没有遇到任何错误,但是我也没有得到期望的结果。
我的查询看起来像这样
INSERT INTO table2
(a, b, c, d)
SELECT
a, b, c, d
FROM table1 AS t
WHERE t.id <> 0
ON DUPLICATE KEY UPDATE
a = t.a
b = t.b
是的,可以查询该模式,但是非常罕见的是我们将更新作为唯一键的一部分的列a
或b
。
当由于违反唯一性约束而导致INSERT尝试失败时,ON DUPLICATE KEY部分将对现有行进行UPDATE操作。
鉴于table2的PRIMARY KEY(或UNIQUE KEY)是元组(a,b,c)
,我们通常只希望更新a,b和c以外的列。
类似这样的东西:
INSERT INTO table2 (a, b, c, d)
SELECT s.a
, s.b
, s.c
, s.d
FROM table1 s
WHERE s.id <> 0
ON DUPLICATE KEY
UPDATE d = VALUES(d)
这是执行我们期望的操作的模式,如MySQL参考手册中所述。
(问题避开了给出一个规范,即“期望结果”是什么的实际描述。提出问题时,我们不能对如何实现期望结果给出任何建议;我们只是在猜测。)