【问题标题】:Insert if multiple rows don't exist, update if they do如果多行不存在则插入,如果存在则更新
【发布时间】:2012-12-17 09:08:12
【问题描述】:

我有一张和这张类似的桌子...

+-------------+-------------+
| Field       | Type        |
+-------------+-------------+
| var1        | varchar(15) |
| var2        | varchar(25) |
| var3        | int(1)      |
+-------------+-------------+

问题是我需要能够插入 3 个变量,但前提是 var1 和 var2 尚未在表中。如果 var1 和 var2 已在表中,则应更新 var3。

例如

INSERT INTO table (var1, var2, var3) VALUES('0','1','2')

会插入 3 个值,但是

INSERT INTO table (var1, var2, var3) VALUES('0','1','1')

将 ('0','1','2') 更新为 ('0','1','1')

重要的是,如果 var1 和 var2 存在,则不会输入具有不同 var3 的重复条目。

我查看了其他几个问题,但其中大多数似乎都推荐 IGNORE,我认为这对我不起作用,因为我正在检查多个重复项。

【问题讨论】:

    标签: php mysql insert sql-update


    【解决方案1】:

    首先,将(var1,var2) 设置为组合PRIMARY KEY

    ALTER TABLE table ADD PRIMARY KEY(var1,var2)
    

    然后使用INSERT ON DUPLICATE UPDATE

    INSERT INTO table (var1, var2, var3) VALUES ('0','1','2') ON DUPLICATE KEY UPDATE var3 = '2'
    

    【讨论】:

    • 完美,谢谢。我没有意识到你可以有多个主键。另外,我必须在“UPDATE”之后删除“SET”才能正常工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-31
    • 1970-01-01
    • 2016-05-15
    • 1970-01-01
    • 1970-01-01
    • 2019-10-17
    • 2012-12-13
    相关资源
    最近更新 更多