我的问题是关于批量插入+更新,
我想插入大量数据并按特定列更新相同的数据,而不是同时更新主键。所以我不能使用INSERT...ON DUPLICATE KEY UPDATE
。
有办法吗?
例如,我有一个“人”表,它有“名称” - “电话” - “安全号码”列。 第一次批量插入,我添加了新的人,但不想要一个具有相同名称的新记录,只需更新其他信息(电话和安全号码) 另一个插入操作,我添加新的poeple,但不希望新记录具有相同的电话号码,只需更新其名称和安全号码。 (这个例子可能有点荒谬,对不起)
答案 0 :(得分:1)
这可能不是唯一的解决方案,但这首先是我想到的。编写触发器并在每次批量插入时动态创建它(从代码中执行sql),并在插入后删除它,以便下次可以检查不同的列。伪代码:
CREATE TRIGGER ON INSERT
BEGIN
DECLARE t int;
SELECT t = COUNT(1) FROM table WHERE your_defined_column = inserted.your_defined_column
IF(t > 0)
BEGIN
UPDATE table SET all_columns... WHERE your_defined_column = inserted.your_defined_column
--STOP FROM INSERTING
END
ELSE
--LET IT INSERT
END
END
希望这会有所帮助:)
答案 1 :(得分:0)
您可以使用唯一键索引而不是主键。你插入的sql将是相同的。
只需更改表并在指定列上添加唯一索引。