ON DUPLICATE KEY UPDATE,唯一索引或者主鍵插入重復修改記錄


解決的問題:

唯一索引或者主鍵插入重復修改記錄

表結構如下,name有唯一索引,主鍵是 id

CREATE TABLE `unique_key_test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `score` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4;

插入數據,執行第二次重復插入,報錯

INSERT INTO `unique_key_test` (`id`, `name`, `score`) VALUES ('1', '張三', '7');

 

[SQL]INSERT INTO `juc_test`.`unique_key_test` (`id`, `name`, `score`) VALUES ('1', '張三', '1')

[Err] 1062 - Duplicate entry '1' for key 'PRIMARY'

 

場景1:如果數據是導入的,id作為標識可以重復導入。有更新就更新,正常我們可能需要先查詢后插入了。但是這個時候可以用到 ON DUPLICATE KEY UPDATE

 

INSERT INTO `juc_test`.`unique_key_test` (`id`, `name`, `score`) VALUES ('1', '張三', '1')
ON DUPLICATE KEY UPDATE id = '1', score = '8' ;


受影響的行: 2
時間: 0.012s

 

場景2:如果name作為唯一條件,或者多個條件作為唯一條件,即唯一索引。比如我們用戶信息三要素(姓名、身份證號、手機號)要作為唯一索引

INSERT INTO `unique_key_test` (`id`, `idcard`, `name`, `score`) VALUES ('2', '211', '張三', '8')
ON DUPLICATE KEY UPDATE idcard = '211', name='張三', score = '3' ;


受影響的行: 2
時間: 0.043s

 

擴展

當插入多條數據,其中不只有表中已存在的,還有需要新插入的數據


免責聲明!

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



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