我有一个大数据集,想要导入到我的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 |
例如,在上表中:
101
,2017
不存在,所以我想将其与year
和data1
,{ {1}}
data2
,123
确实存在,所以我想用给定的值更新2017
,data1
,其中{{1 }}
答案 0 :(得分:0)
由于您的要求不是关于主键的,因此您需要使用以下过程:
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 ;