測試用的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是一樣的。