mysql replace into用法詳細說明

2022-06-07 15:24:09 字數 3257 閱讀 1032

replace的執行與insert很相似。只有一點例外,假如表中的乙個舊記錄與乙個用於primary

key或乙個unique索引的新記錄具有相同的值,則在新記錄被插入之前,舊記錄被刪除。 

注意,除非表有乙個primary key或unique索引,否則,使用乙個replace語句沒有意義。該

語句會與insert相同,因為沒有索引被用於確定是否新行複製了其它的行。

所有列的值均取自在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(新增)或更大(替換)。

1. 嘗試把新行插入到表中

2. 當因為對於主鍵或唯一關鍵字出現重複關鍵字錯誤而造成插入失敗時:

a. 從表中刪除含有重複關鍵字值的衝突行

b. 再次嘗試把新行插入到表中

replace [low_priority | delayed]

[into] tbl_name [(col_name,...)]

values (,…),(…),…

或:replace [low_priority | delayed]

[into] tbl_name

set col_name=, …

或:replace [low_priority | delayed]

[into] tbl_name [(col_name,...)]

select …

replace into `table` (`unique_column`,`num`) values

('$unique_value',$num);跟insert into `table` (`unique_column`,`num`)

values('$unique_value',$num) on duplicate update num=$num;還是有些區別的.

區別就是replace into的時候會刪除老記錄。如果表中有乙個自增的主鍵。

那麼就要出問題了。

首先,因為新紀錄與老記錄的主鍵值不同,所以其他表中所有與本表老資料主鍵id建立的關聯全部會被破壞。

其次,就是,頻繁的replace into 會造成新紀錄的主鍵的值迅速增大。

總有一天。達到最大值後就會因為資料太大溢位了。就沒法再插入新紀錄了。資料表滿了,不是因為空間不夠了,而是因為主鍵的值沒法再增加了。

replace的執行與insert很相似。只有一點例外,假如表中的乙個舊記錄與乙個用於primary

key或乙個unique索引的新記錄具有相同的值,則在新記錄被插入之前,舊記錄被刪除。 

注意,除非表有乙個primary key或unique索引,否則,使用乙個replace語句沒有意義。該

語句會與insert相同,因為沒有索引被用於確定是否新行複製了其它的行。

所有列的值均取自在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(新增)或更大(替換)。

1. 嘗試把新行插入到表中

2. 當因為對於主鍵或唯一關鍵字出現重複關鍵字錯誤而造成插入失敗時:

a. 從表中刪除含有重複關鍵字值的衝突行

b. 再次嘗試把新行插入到表中

replace [low_priority | delayed]

[into] tbl_name [(col_name,...)]

values (,…),(…),…

或:replace [low_priority | delayed]

[into] tbl_name

set col_name=, …

或:replace [low_priority | delayed]

[into] tbl_name [(col_name,...)]

select …

replace into `table` (`unique_column`,`num`) values

('$unique_value',$num);跟insert into `table` (`unique_column`,`num`)

values('$unique_value',$num) on duplicate update num=$num;還是有些區別的.

區別就是replace into的時候會刪除老記錄。如果表中有乙個自增的主鍵。

那麼就要出問題了。

首先,因為新紀錄與老記錄的主鍵值不同,所以其他表中所有與本表老資料主鍵id建立的關聯全部會被破壞。

其次,就是,頻繁的replace into 會造成新紀錄的主鍵的值迅速增大。

總有一天。達到最大值後就會因為資料太大溢位了。就沒法再插入新紀錄了。資料表滿了,不是因為空間不夠了,而是因為主鍵的值沒法再增加了。

mysql replace into用法詳細說明

replace的執行與insert很相似。只有一點例外,假如表中的乙個舊記錄與乙個用於primary key或乙個unique索引的新記錄具有相同的值,則在新記錄被插入之前,舊記錄被刪除。注意,除非表有乙個primary key或unique索引,否則,使用乙個replace語句沒有意義。該 語句會...

Struts config xml 詳細說明

頁面中表單對應的bean儲存表單資料,驗證 type hello.helloform formbean 對應的包名.類名 路徑的邏輯名,此項必須有 path action1.do 指向 或重定向的uri.此項是必需的,必須以 開頭.請求訪問action的路徑,必須以 開頭 type hello.he...

Struts config xml 詳細說明

頁面中表單對應的bean儲存表單資料,驗證 type hello.helloform formbean 對應的包名.類名 name forward1 路徑的邏輯名,此項必須有 path action1.do 指向 或重定向的uri.此項是必需的,必須以 開頭.name forward2 path a...