gpt4 book ai didi

mysql - 不使用主键时 MySQL 中的 UPSERT

转载 作者:行者123 更新时间:2023-11-29 16:58:54 25 4
gpt4 key购买 nike

我有一个大型数据集,我想将其导入到我的 MySQL 数据库中(使用 Workbench 或 Sequel Pro)。

问题是有些行已经存在,我不想重复它们。

我的表结构类似于

| uid  | year | data1 | data2 |
|------|------|-------|-------|
| 123 | 2017 | 12345 | abcde |
| 124 | 2017 | 23453 | abdfe |
| 124 | 2016 | 23413 | agrfe |
| 123 | 2016 | 12325 | addde |
| 101 | 2016 | 12325 | adddf |
| 112 | 2017 | 12366 | fgdsd |
| 146 | 2016 | 11111 | adddj |

例如,在上表中:

1012017 不存在,因此我想将其与年份一起插入> 和 data1data2

1232017 确实存在,所以我想更新 data1data2 具有给定值,其中 year = 2017

最佳答案

由于您的要求不是主键,因此您需要使用过程:

DROP PROCEDURE IF EXISTS myUpsert;
DELIMITER |
CREATE PROCEDURE myUpsert (IN vuid INT, IN vyear INT, IN vdata1 INT, IN vdata2 varchar(20))
BEGIN
DECLARE existingCounter INT;
SET existingCounter = (SELECT COUNT(*) from tablename
WHERE uid=vuid AND year=vyear);

IF existingCounter=0 THEN
INSERT INTO tablename (uid,year,data1,data2)
VALUES (vuid,vyear,vdata1,vdata2);
ELSE
UPDATE tablename SET data1=vdata1,data2=vdata2
WHERE uid=vuid AND year=vyear;
END IF;
END
|
DELIMITER ;

关于mysql - 不使用主键时 MySQL 中的 UPSERT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52403663/

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