2010-04-30 70 views
7

使用替换,如果我有两个字段。名字姓氏。如果我要运行REPLACE INTO tblNames(FirstName,LastName)VALUES(John,Jones) 这个表是否包含John Smith?是否将Smith替换为Jones或创建一个新名称?SQL替换成问题

什么决定是否更新或插入?

回答

0

有用于插入两个不同的运营商和更新

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上存在唯一约束,则可能会失败)

+0

当我回答没有“mysql”标记时,所以我的代码示例是标准SQL – UserControl 2010-04-30 09:24:01

+0

如果记录已存在,是否有避免插入时出现错误的方法? – Matt 2010-05-01 08:15:45

+0

在更新或插入之前,您可以执行'select'来检查条目是否已经存在。不确定MySQL,但在SQL Server中,你甚至可以避免选择。典型场景: 更新tblNames设置...,其中关键条件 如果@@ ROWCOUNT = 0 - 受上一语句的行数(即更新) INSERT INTO tblNames .... 抱歉,对于最近的答案,希望这有助于 – UserControl 2010-05-03 09:35:13

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

+0

所以如果John Smith在桌子上,并且我发送John Jones,那么我使用什么sql命令来插入John Jones,但是如果我发送John Smith,它什么也不做。 – Matt 2010-04-30 09:53:53

+0

@Matt:请发表SHOW CREATE TABLE tblNames'的输出 – Quassnoi 2010-04-30 10:42:42

+0

还没有表格..这是假设的计划:) – Matt 2010-05-01 08:14:29