SQL替换成问题

时间:2010-04-30 09:12:50

标签: sql mysql replace

使用Replace Into,如果我有两个字段。 FirstName LastName。该表中有John Smith,如果我要运行REPLACE INTO tblNames(FirstName,LastName)VALUES(John,Jones) 这会取代史密斯和琼斯,还是创建一个新名字?

是什么决定它是更新还是插入?

3 个答案:

答案 0 :(得分:8)

REPLACE
INTO    tblNames (FirstName, LastName)
VALUES  ('John', 'Jones')

如果在FirstNameLastName或其组合中存在任何类型的唯一约束,并且它被违反,则记录将被删除并插入新值。

如果满足任何条件,记录将被替换:

  • FirstNameUNIQUE,表格中有John
  • LastNameUNIQUE,表格中有Jones
  • FirstName, LastnameUNIQUE,表格中有John Jones

请注意,REPLACE操作可能是INSERT后跟DELETE,这将始终影响该表。

在较新版本的MySQL中,您应该使用INSERT … ON DUPLICATE KEY UPDATE

答案 1 :(得分:0)

这取决于表上的主键和/或唯一约束。如果没有主键或唯一约束,则它与基本的INSERT语句没有区别。

文档给出了一个相当清楚的解释:http://dev.mysql.com/doc/refman/5.0/en/replace.html

答案 2 :(得分:0)

插入和更新有两种不同的运算符

update tblNames set FirstName="John", LastName="Smith" where FirstName="John" and LastName="Jones"

这将John Jones重命名为John Smith

insert into tblNames (FirstName, LastName) values ("John", "Smith")

这将添加一个新条目(但如果表中已有John Smith并且FirstName / LastName存在唯一约束,则可能会失败)