濮阳杆衣贸易有限公司

主頁 > 知識庫 > 詳解MySQL主鍵唯一鍵重復插入解決方法

詳解MySQL主鍵唯一鍵重復插入解決方法

熱門標簽:電話機器人接口是什么樣的 沈陽外呼系統有效果嗎 四川穩(wěn)定外呼系統公司 AI智能云呼電話機器人怎么注冊 怎么在高德地圖標注多個點 百度地圖標注信息怎么修改 福州外呼系統招商 商家地圖標注圖片 溫州語音外呼系統排名

我們插入數據的時候,有可能碰到重復數據插入的問題,但是這些數據又是不被允許有重復值:

CREATE TABLE stuInfo (
  id INT NOT NULL COMMENT '序號',
  name VARCHAR(20) NOT NULL DEFAULT '' COMMENT '姓名',
  age INT NOT NULL DEFAULT 0 COMMENT '年齡',
  PRIMARY KEY (id),
  UNIQUE KEY uniq_name(name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='學生表';
mysql> INSERT INTO stuInfo (id,name,age) VALUES (1,'yoona',20),(1,'xiaosi',25),(2,'aa',24);
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

解決方案:

1. IGNORE

使用ignore當插入的值遇到主鍵(PRIMARY KEY)或者唯一鍵(UNIQUE KEY)重復時自動忽略重復的記錄行,不影響后面的記錄行的插入。

INSERT IGNORE INTO stuInfo (name,birthday,is_deleted) VALUES ('yoona','1990-01-05',0),('aa','1990-01-16',0),('bb','1990-01-17',0);

運行結果:

mysql> INSERT IGNORE INTO stuInfo (id,name,age) VALUES (1,'yoona',20),(1,'xiaosi',25),(2,'aa',24);
Query OK, 2 rows affected (0.02 sec)
Records: 3  Duplicates: 1  Warnings: 0
mysql> select * from stuInfo; 
+----+-------+-----+
| id | name  | age |
+----+-------+-----+
|  1 | yoona |  20 |
|  2 | aa    |  24 |
+----+-------+-----+
2 rows in set (0.00 sec)

我們可以從運行結果中看出,只有兩行受到影響,意思即(1,'yoona',20)數據插入,(1,'xiaosi',25)重復數據自動被忽略,(2,'aa',24)不重復數據繼續(xù)插入,不會受到重復數據的影響;

2. REPLACE

使用replace當插入的記錄遇到主鍵或者唯一鍵重復時先刪除表中重復的記錄行再插入。

mysql> REPLACE INTO stuInfo (name,birthday,is_deleted) VALUES ('yoona','1990-01-15',0),('yoona','1990-02-16',0),('aa','1990-01-13',0);
Query OK, 4 rows affected (0.02 sec)
Records: 3  Duplicates: 1  Warnings: 0
運行結果:
 
mysql> select * from stuInfo;                                                   +----+-------+------------+------------+
| id | name  | birthday   | is_deleted |
+----+-------+------------+------------+
| 21 | yoona | 1990-02-16 |          0 |
| 22 | aa    | 1990-01-13 |          0 |
+----+-------+------------+------------+
2 rows in set (0.00 sec)

從輸出的信息可以看到是4行受影響,說明它是先插入了(‘yoona','1990-01-15',0)然后又刪除了(‘yoona','1990-01-15',0)。

3. ON DUPLICATE KEY UPDATE

當插入的記錄遇到主鍵或者唯一鍵重復時,會執(zhí)行后面定義的UPDATE操作。相當于先執(zhí)行Insert 操作,再根據主鍵或者唯一鍵執(zhí)行update操作。

DROP TABLE  IF EXISTS stuInfo;
CREATE TABLE stuInfo (
  id INT NOT NULL COMMENT '序號',
  name VARCHAR(20) NOT NULL DEFAULT '' COMMENT '姓名',
  age INT NOT NULL DEFAULT 0 COMMENT '年齡',
  PRIMARY KEY (id),
  UNIQUE KEY uniq_name(name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='學生表';

在ON DUPLICATE KEY UPDATE后VALUES解釋:

VAULES(age)指的是待插入的記錄的值

age指得是表的自身值,已插入值。

(1)第一種情形:

#VALUES(age) 待插入值 25
INSERT INTO stuInfo (id,name,age) VALUES (1,'yoona',20),(1,'xiaosi',25) ON DUPLICATE KEY UPDATE age = VALUES(age) + 1;

相當于:

INSERT INTO stuInfo (id,name,age) VALUES (1,'yoona',20);
UPDATE stuInfo 
SET age = VALUES(age) + 1
WHERE id = 1;

運行結果:

mysql> INSERT INTO stuInfo (id,name,age) VALUES (1,'yoona',20),(1,'xiaosi',25) ON DUPLICATE KEY UPDATE age = VALUES(age) + 1;
Query OK, 3 rows affected (0.01 sec)
Records: 2  Duplicates: 1  Warnings: 0
mysql> select * from stuInfo;   
+----+-------+-----+
| id | name  | age |
+----+-------+-----+
|  1 | yoona |  26 |
+----+-------+-----+
1 row in set (0.00 sec)

(2)第二種情形:

#age 已插入值 20
INSERT INTO stuInfo (id,name,age) VALUES (1,'yoona',20),(1,'xiaosi',25) ON DUPLICATE KEY UPDATE age = age + 1;

相當于:

INSERT INTO stuInfo (id,name,age) VALUES (1,'yoona',20);
UPDATE stuInfo 
SET age = age + 1
WHERE id = 1;

運行結果:

mysql> INSERT INTO stuInfo (id,name,age) VALUES (1,'yoona',20),(1,'xiaosi',25) ON DUPLICATE KEY UPDATE age = age + 1;
Query OK, 3 rows affected (0.02 sec)
Records: 2  Duplicates: 1  Warnings: 0
mysql> select * from stuInfo;
 +----+-------+-----+
| id | name  | age |
+----+-------+-----+
|  1 | yoona |  21 |
+----+-------+-----+
1 row in set (0.00 sec)

如果遇到重復插入的數據的情形,ON DUPLICATE KEY UPDATE用來對已插入的數據進行修改,可以使用獲取重復已插入數據(直接使用字段名稱),也可以獲取重復待插入數據(values(字段名稱))。我們不會對重復待插入數據進行插入操作。

重復已插入數據:上例中的(1,'yoona',20)

重復待插入數據:上例中的(1,'yoona',25)

到此這篇關于詳解MySQL主鍵唯一鍵重復插入解決方法的文章就介紹到這了,更多相關MySQL主鍵唯一鍵重復插入內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Mysql避免重復插入數據的4種方式
  • 防止MySQL重復插入數據的三種方法
  • MySql三種避免重復插入數據的方法
  • mysql 存儲過程判斷重復的不插入數據
  • 分享MYSQL插入數據時忽略重復數據的方法
  • MySql避免重復插入記錄的幾種方法
  • MYSQL插入處理重復鍵值的幾種方法

標簽:邯鄲 七臺河 無錫 汕尾 來賓 營口 西寧 寶雞

巨人網絡通訊聲明:本文標題《詳解MySQL主鍵唯一鍵重復插入解決方法》,本文關鍵詞  詳解,MySQL,主鍵,唯,一鍵,;如發(fā)現本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《詳解MySQL主鍵唯一鍵重復插入解決方法》相關的同類信息!
  • 本頁收集關于詳解MySQL主鍵唯一鍵重復插入解決方法的相關信息資訊供網民參考!
  • 推薦文章
    长海县| 阳西县| 湘阴县| 自治县| 清镇市| 洛浦县| 泸定县| 东阳市| 腾冲县| 清丰县| 嵊州市| 合作市| 神木县| 奉新县| 定边县| 日照市| 湛江市| 容城县| 崇仁县| 射洪县| 青铜峡市| 石狮市| 南汇区| 徐汇区| 万年县| 洞头县| 手机| 贵南县| 阿瓦提县| 卓资县| 沙河市| 尼木县| 郧西县| 三河市| 西充县| 赣榆县| 永年县| 公主岭市| 枣庄市| 双柏县| 昌宁县|