【发布时间】:2011-02-14 04:00:08
【问题描述】:
如果我有两个字段,则使用 Replace Into。名字姓氏。如果我要运行 REPLACE INTO tblNames (FirstName, LastName) VALUES (John, Jones),该表中有 John Smith 这会用琼斯取代史密斯,还是创建一个新名字?
什么决定了它是更新还是插入?
【问题讨论】:
如果我有两个字段,则使用 Replace Into。名字姓氏。如果我要运行 REPLACE INTO tblNames (FirstName, LastName) VALUES (John, Jones),该表中有 John Smith 这会用琼斯取代史密斯,还是创建一个新名字?
什么决定了它是更新还是插入?
【问题讨论】:
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。
【讨论】:
SHOW CREATE TABLE tblNames的输出
REPLACE INTO 和INSERT INTO ... ON DUPLICATE KEY UPDATE 之间的区别!! (我在想)
这取决于表上的主键和/或唯一约束。如果没有主键或唯一约束,则与基本的 INSERT 语句没有区别。
文档给出了相当清晰的解释:http://dev.mysql.com/doc/refman/5.0/en/replace.html
【讨论】:
插入和更新有两种不同的操作符
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 存在唯一约束,则可能会失败)
【讨论】: