2010-04-30 77 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