使用替换,如果我有两个字段。名字姓氏。如果我要运行REPLACE INTO tblNames(FirstName,LastName)VALUES(John,Jones) 这个表是否包含John Smith?是否将Smith替换为Jones或创建一个新名称?SQL替换成问题
什么决定是否更新或插入?
使用替换,如果我有两个字段。名字姓氏。如果我要运行REPLACE INTO tblNames(FirstName,LastName)VALUES(John,Jones) 这个表是否包含John Smith?是否将Smith替换为Jones或创建一个新名称?SQL替换成问题
什么决定是否更新或插入?
它取决于表上的主键和/或唯一约束。如果没有主键或唯一的限制,它与基本的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"
这将约翰·琼斯改名为约翰·史密斯
insert into tblNames (FirstName, LastName) values ("John", "Smith")
这将添加一个新条目(但如果表中已存在John Smith,并且FirstName/LastName上存在唯一约束,则可能会失败)
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
。
当我回答没有“mysql”标记时,所以我的代码示例是标准SQL – UserControl 2010-04-30 09:24:01
如果记录已存在,是否有避免插入时出现错误的方法? – Matt 2010-05-01 08:15:45
在更新或插入之前,您可以执行'select'来检查条目是否已经存在。不确定MySQL,但在SQL Server中,你甚至可以避免选择。典型场景: 更新tblNames设置...,其中关键条件 如果@@ ROWCOUNT = 0 - 受上一语句的行数(即更新) INSERT INTO tblNames .... 抱歉,对于最近的答案,希望这有助于 – UserControl 2010-05-03 09:35:13