mysql replace into 實現存在則更新,不存在則插入


 

 

測試用的mysql數據庫:

 

新建測試表:

CREATE TABLE `test` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `text` varchar(255) DEFAULT NULL,
  `uid` varchar(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uid_unique` (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

以上建表三個字段,id是主鍵自增,bigint類型。uid是字符串,但是加上了唯一約束’uid_unique‘。

 

(1) 添加新的數據

 

 

因為庫里面沒有新的數據,所以肯定是產生一條數據。

 

 

 (2) 產生一條新的數據,和 id 以及 uid都不沖突的

 

 

這個時候,因為id是主鍵自增的,所以這個時候,會產生一個次於最大值的值,就是1002 

 

 

(3)現在測試 id沖突,但是 uid不沖突的

 

 

 

發現會以id為 依據進行替換。

 

(4)測試uid沖突,但是id不沖突的。

 

 

結果:

 

 

發現會根據uid進行替換。

 

 (5)當id和uid都沖突的時候

 

 

 

發現會根據這些進行替換。

 

(6)當uid沖突的時候,且自增主鍵,id為空的時候

 

 

 

 

 發現這個時候會刪除這條信息,然后新生成一個id。

 

 

綜上所述,總的來說replace into 操作的結果是: 首先會判斷是否存在沖突,可以是主鍵沖突,也可以是唯一約束。 然后刪除這些數據,然后再插入數據。刪除數據后插入的效果就跟insert into是一樣的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM