使用Replace Into,如果我有两个字段。 FirstName LastName。该表中有John Smith,如果我要运行REPLACE INTO tblNames(FirstName,LastName)VALUES(John,Jones) 这会取代史密斯和琼斯,还是创建一个新名字?
是什么决定它是更新还是插入?
答案 0 :(得分:8)
REPLACE
INTO tblNames (FirstName, LastName)
VALUES ('John', 'Jones')
如果在FirstName
,LastName
或其组合中存在任何类型的唯一约束,并且它被违反,则记录将被删除并插入新值。
如果满足任何条件,记录将被替换:
FirstName
为UNIQUE
,表格中有John
,LastName
为UNIQUE
,表格中有Jones
,FirstName, Lastname
为UNIQUE
,表格中有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存在唯一约束,则可能会失败)