gpt4 book ai didi

Mysql 上的重复键全部替换

转载 作者:行者123 更新时间:2023-11-29 22:04:36 25 4
gpt4 key购买 nike

我有一个表T1:

 Col1 | Col2
-------------
a | 2
b | 3

如果 Col1 是唯一的而 Col2 不是,那么我可以运行查询:

INSERT INTO T1 (Col1, Col2)
VALUES (b,2)
ON DUPLICATE KEY UPDATE
Col2=VALUES(Col2);

表格现在看起来像这样:

 Col1 | Col2
-------------
a | 2
b | 2

如果 Col1Col2 都是唯一的,我想运行一个单个查询:

INSERT INTO T1 (Col1, Col2)
VALUES (b,2)
ON DUPLICATE KEY -- REPLACE ALL INSTANCES ?
Col1 = VALUES(Col1), Col2=VALUES(Col2);

结果如下:

 Col1 | Col2
-------------
b | 2

因此键“b”现在与键“2”关联,取代了“a”的关联和“b”之前的关联。

是否有 mysql 查询或扩展可以完成此任务? (显然,这可以通过多个查询来完成,我正在寻找此用例的 ON DUPLICATE 扩展的类似物。)

最佳答案

环顾四周后,我很确定这是不可能的。手册中除了 ON DUPLICATE KEYUPDATEIGNORE 之外,没有提及任何内容。请求的操作相当于在 UPDATE 语句中执行 DELETE。 (这是你做不到的)。

以下代码执行该任务,我不喜欢将其包装在事务中,但这是目前执行此操作的唯一方法。

START TRANSACTION;
DELETE FROM t1 WHERE Col2 = 2 AND Col1 <> "b"; -- Without checking Col1 the row will be replaced instead of updated if the entry ("b",2) already exists
INSERT INTO t1 (Col1, Col2)
VALUES("b",2)
ON DUPLICATE KEY UPDATE
Col2 = VALUES(Col2);
COMMIT;

关于Mysql 上的重复键全部替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32283431/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com