根据任何列插入或更新

时间:2013-08-22 07:34:15

标签: mysql bulkinsert

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

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

有办法吗?

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

2 个答案:

答案 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将是相同的。

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