解決的問題:
唯一索引或者主鍵插入重復修改記錄
表結構如下,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