首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 主鍵重複衝突處理三大方案:DELETE+INSERT、REPLACE、ON DUPLICATE KEY UPDATE

     編輯:MySQL 資料庫相關知識

向資料表 INSERT 時遇唯一鍵/主鍵重複會拋出 Duplicate key 錯誤。以下以 user(userid PK, username) 為例,說明三種交由 MySQL 直接處理的高效方案。

測試資料準備

CREATE TABLE `user` (`userid` INT(11), `username` VARCHAR(255) NOT NULL DEFAULT '');
ALTER TABLE `user` ADD PRIMARY KEY `userid` (`userid`);
INSERT INTO `user` VALUES (1, 'eric'), (2, 'jesus');

方案比較

1. 先刪除再插入

DELETE FROM user WHERE userid = 1;
INSERT INTO user VALUES (1, 'xxxxx');

兩條語句,需自行控制交易。

2. REPLACE INTO

REPLACE INTO user VALUES (1, 'newvalue');

邏輯:存在則先刪除再插入。affected rows = 2(刪1+增1)。

3. INSERT ... ON DUPLICATE KEY UPDATE(推薦)

INSERT INTO user VALUES (1, 'newvalueagain') 
ON DUPLICATE KEY UPDATE username = VALUES(username);

不存在則插入,存在則更新指定欄位。affected rows = 2(1=新增/2=更新)。單一語句、原子性、效能最佳。

其他替代方案(效能較低)

  • PHP 先 SELECT 判斷再決定 INSERT/UPDATE
  • 先 UPDATE,affected rows=0 再 INSERT

上述皆需多次往返資料庫,不如方案 2、3 高效。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved