實踐過程:
id 是主鍵
測試方式一,插入索引值是一樣的:
replace into fanwe_order(id,sn) values('33','測試replace into 使用') 結果:受影響的行數:
2select * from fanwe_order where sn='測試replace into 使用'
結果:查出 一行記錄
測試方式二,插入主鍵值是重複的:
將插入id指定為34。這樣不與資料表中的id有重複現象,之後執行查詢
replace into fanwe_order(id,sn) values('34','測試replace into 使用')
結果:沒有新插入一條資料。還是替換了原來的那行。id從33變為34
原因分析:
手冊上提到,如果表中的乙個舊記錄與乙個用於primary key或乙個unique索引的新記錄具有相同的值。
意,除非表有乙個primary key或unique索引,否則,使用乙個replace語句沒有意義。
剛才測試的例子中。id是主鍵,sn是唯一索引。測試方式一是出現主鍵值一樣,測試方式二是出現唯一索
引值一樣。兩種情況都出現了replace
理解:插入資料的時候,假如遇到主鍵值或者唯一索引鍵值一樣的話。那麼就使用替代(replace單詞的含
義反應了其作用)的方式,刪掉原來的。以當前插入的行進行替代(所以需要同時具有insert和delete許可權
)先刪除後插入新的。正好說明了我看到的現象:顯示受影響的行數是2
兩種情況之一使用replace語句才會出現替換:1.主鍵值相同 2.遇到設定為唯一字段值相同情況。
遇到重複的值,則跳過不插入的處理辦法
重複的值,是指表的唯一索引字段(主鍵也是唯一索引字段),遇到值是重複的情況。
insert ignore into `table_name` (`email`, `phone`, `user_id`) values ('[email protected]', '99999', '9999');
如何判斷有沒有插入成功呢?遇到重複值,就沒有插入成功,此時返回的受影響行數是0。插入成功,返回的受影響行數是1。
mysql replace into用法詳細說明
replace的執行與insert很相似。只有一點例外,假如表中的乙個舊記錄與乙個用於primary key或乙個unique索引的新記錄具有相同的值,則在新記錄被插入之前,舊記錄被刪除。注意,除非表有乙個primary key或unique索引,否則,使用乙個replace語句沒有意義。該 語句會...
mysql replace into用法詳細說明
replace的執行與insert很相似。只有一點例外,假如表中的乙個舊記錄與乙個用於primary key或乙個unique索引的新記錄具有相同的值,則在新記錄被插入之前,舊記錄被刪除。注意,除非表有乙個primary key或unique索引,否則,使用乙個replace語句沒有意義。該 語句會...
MySQL Replace INTO的高階使用
replace的執行與insert很相像。只有一點除外,如果表中的乙個舊記錄與乙個用於primary key或乙個unique索引的新記錄具有相同的值,則在新記錄被插入之前,舊記錄被刪除。請參見13.2.4節,insert語法 注意,除非表有乙個primary key或unique索引,否則,使用乙...