使用替換,如果我有兩個字段。名字姓氏。如果我要運行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