1

我的问题是关于批量插入+更新,

我想插入大量数据并通过特定列更新相同的数据,而不是同时通过主键。所以我不能用INSERT...ON DUPLICATE KEY UPDATE

有没有办法做到这一点?

例如,我有一个“person”表,它有“name”-“phone”-“security-number”列。第一次批量插入,我添加新人,但不想要一个具有相同名称的新记录,只需更新它的其他信息(电话和安全号码)另一个插入操作,我添加新人,但不想要一个具有相同电话号码的新记录,只需更新其名称和安全号码。(这个例子可能有点荒谬,对不起)

4

2 回答 2

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

希望这可以帮助 :)

于 2013-08-22T08:45:14.837 回答
0

您可以使用唯一键索引而不是主键。并且您插入的 sql 将是相同的。

只需更改表并在指定列上添加唯一索引。

于 2013-08-22T08:00:45.803 回答