MySQL中REPLACE INTO和INSERT INTO的差別剖析。本站提示廣大學習愛好者:(MySQL中REPLACE INTO和INSERT INTO的差別剖析)文章只能為提供參考,不一定能成為您想要的結果。以下是MySQL中REPLACE INTO和INSERT INTO的差別剖析正文
留意,除非表有一個PRIMARY KEY或UNIQUE索引,不然,應用一個REPLACE語句沒成心義。該語句會與INSERT雷同,由於沒有索引被用於肯定能否新行復制了其它的行。
[separator]
一切列的值均取安閒REPLACE語句中被指定的值。一切缺掉的列被設置為各自的默許值,這和INSERT一樣。您不克不及從以後行中援用值,也不克不及在新行中應用值。假如您應用一個例如“SET col_name = col_name + 1”的賦值,則對位於右邊的列稱號的援用會被作為DEFAULT(col_name)處置。是以,該賦值相當於SET col_name = DEFAULT(col_name) + 1。
為了可以或許應用REPLACE,您必需同時具有表的INSERT和DELETE權限。
REPLACE語句會前往一個數,來指導受影響的行的數量。該數是被刪除和被拔出的行數的和。假如關於一個單行REPLACE該數為1,則一行被拔出,同時沒有行被刪除。假如該數年夜於1,則在新行被拔出前,有一個或多個舊行被刪除。假如表包括多個獨一索引,而且新行復制了在分歧的獨一索引中的分歧舊行的值,則有能夠是一個單一行調換了多個舊行。
受影響的行數可以輕易地肯定能否REPLACE只添加了一行,或許能否REPLACE也調換了其它行:檢討該數能否為1(添加)或更年夜(調換)。
假如您正在應用C API,則可使用mysql_affected_rows()函數取得受影響的行數。
今朝,您不克不及在一個子查詢中,向一個表中改換,同時從統一個表當選擇。
下文時算法的具體解釋(此算法也用於LOAD DATA…REPLACE):
1. 測驗考試把新行拔出到表中
2. 當由於關於主鍵或獨一症結字湧現反復症結字毛病而形成拔出掉敗時:
a. 從表中刪除含有反復症結字值的抵觸行
b. 再次測驗考試把新行拔出到表中
應用格局以下:
REPLACE [LOW_PRIORITY | DELAYED]
[INTO] tbl_name [(col_name,...)]
VALUES ({expr | DEFAULT},…),(…),…
或:
REPLACE [LOW_PRIORITY | DELAYED]
[INTO] tbl_name
SET col_name={expr | DEFAULT}, …
或:
REPLACE [LOW_PRIORITY | DELAYED]
[INTO] tbl_name [(col_name,...)]
SELECT …