最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2021年09月07日 10:15:57   作者:SunnyYoona  
我們插入數(shù)據(jù)的時候,有可能碰到重復數(shù)據(jù)插入的問題,那么MySQL主鍵唯一鍵重復插入如何解決,本文就詳細的來介紹一下,感興趣的可以了解一下

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

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)數(shù)據(jù)插入,(1,'xiaosi',25)重復數(shù)據(jù)自動被忽略,(2,'aa',24)不重復數(shù)據(jù)繼續(xù)插入,不會受到重復數(shù)據(jù)的影響;

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 操作,再根據(jù)主鍵或者唯一鍵執(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)

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

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

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

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

相關文章

  • MySQL中的數(shù)據(jù)庫約束用法及說明

    MySQL中的數(shù)據(jù)庫約束用法及說明

    本文介紹了MySQL數(shù)據(jù)庫中的約束類型,包括notnull、unique、default、primary key、foreign key和check,這些約束類型用于實現(xiàn)對插入數(shù)據(jù)的管控,確保數(shù)據(jù)的完整性和邏輯性
    2026-03-03
  • MySQL占用CPU過高,排查原因及解決方案

    MySQL占用CPU過高,排查原因及解決方案

    這篇文章主要介紹了MySQL占用CPU過高,排查原因及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • MySQL 數(shù)據(jù)庫設計復習筆記及項目實戰(zhàn)

    MySQL 數(shù)據(jù)庫設計復習筆記及項目實戰(zhàn)

    參考的數(shù)據(jù)庫文檔主要有:目前國內(nèi)的常見的PHP系統(tǒng)的數(shù)據(jù)庫
    2010-03-03
  • Mysql8.0修改配置文件my.ini的坑及解決

    Mysql8.0修改配置文件my.ini的坑及解決

    使用記事本直接編輯my.ini文件保存后,可能會導致MySQL無法啟動,因為MySQL會以ANSI編碼讀取該文件,解決方法是使用Notepad++打開my.ini文件,選擇ANSI編碼保存
    2025-01-01
  • Mysql數(shù)據(jù)庫支持的存儲引擎對比

    Mysql數(shù)據(jù)庫支持的存儲引擎對比

    這篇文章主要介紹了Mysql數(shù)據(jù)庫支持的各個存儲引擎之間的對比分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2021-09-09
  • mysql kill進程后出現(xiàn)killed死鎖問題及解決

    mysql kill進程后出現(xiàn)killed死鎖問題及解決

    這篇文章主要介紹了mysql kill進程后出現(xiàn)killed死鎖問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 數(shù)據(jù)庫崩潰,利用備份和日志進行災難恢復

    數(shù)據(jù)庫崩潰,利用備份和日志進行災難恢復

    我相信數(shù)據(jù)庫崩潰都不是大家所愿意看到的,但是這種情況發(fā)生時我們要采取補救措施,本文就是介紹了如何利用備份和日志進行災難恢復,需要的朋友可以參考下
    2015-07-07
  • mysql并發(fā)控制原理知識點

    mysql并發(fā)控制原理知識點

    在本篇文章里小編給大家整理的是一篇關于mysql并發(fā)控制原理知識點內(nèi)容,需要的朋友們參考下吧。
    2020-02-02
  • MySQL中行級鎖和表級鎖的區(qū)別小結

    MySQL中行級鎖和表級鎖的區(qū)別小結

    MySQL中的行級鎖和表級鎖是兩種不同的鎖機制,它們在并發(fā)控制和鎖粒度方面有顯著的區(qū)別,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧
    2025-08-08
  • mysql服務器無法啟動的解決方法

    mysql服務器無法啟動的解決方法

    本文主要介紹了mysql服務器無法啟動的解決方法,mysql服務器無法啟動時,一般時配置文件和路徑的問題,下面就來介紹一下解決方法,感興趣的可以了解一下
    2023-09-09

最新評論

郁南县| 勃利县| 上林县| 玉龙| 南宫市| 北安市| 洪洞县| 杭州市| 夏津县| 山丹县| 岚皋县| 雷山县| 江永县| 北宁市| 韩城市| 奇台县| 荆州市| 正蓝旗| 延长县| 娄底市| 连云港市| 论坛| 法库县| 彭山县| 策勒县| 舞阳县| 西安市| 宜良县| 黎平县| 民和| 灵宝市| 军事| 富锦市| 鹤峰县| 木里| 珲春市| 禄劝| 醴陵市| 海南省| 桂阳县| 湄潭县|