插入并且如果已经存在则更新列SQL

时间:2011-10-25 11:17:08

标签: mysql sql

INSERT INTO users (firstname, lastname, email, mobile) VALUES ('Karem', 'Parem', 'mail@mail.com', '123456789');

这是我想要做的,但是如果已经存在具有相同电子邮件mail@mail.com的行,那么它应该使用这些值更新该行。

我找到http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html,但我不明白

2 个答案:

答案 0 :(得分:5)

使用ALTER TABLEemail列上添加唯一约束,然后尝试此查询:

INSERT INTO users(firstname, lastname, email, mobile)
VALUES ('Karem', 'Parem', 'mail@mail.com', '123456789')
ON DUPLICATE KEY UPDATE
    firstname = 'Karem',
    lastname = 'Parem',
    email = 'mail@mail.com', -- you can probably omit this
    mobile = '123456789'

但请注意 - 如果您在表上定义了任何其他唯一键(包括主键,根据定义是唯一的),那么它们也可以触发更新。

答案 1 :(得分:1)

您可以使用triggers来实现此目标,但在插入/更新之前,IMHO检查是否存在主键更合适:

  • 触发器可能导致并发问题,“插入或更新”可以使用事务来屏蔽此类问题
  • 您的代码将更具可读性
  • 会更有效率