日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL主键唯一键重复插入解决方法

發布時間:2025/1/21 数据库 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL主键唯一键重复插入解决方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

  • 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)不重復數據繼續插入,不會受到重復數據的影響;

    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

    當插入的記錄遇到主鍵或者唯一鍵重復時,會執行后面定義的UPDATE操作。相當于先執行Insert 操作,再根據主鍵或者唯一鍵執行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 UPDATEVALUES解釋:

    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主键唯一键重复插入解决方法的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 亚洲精品久久一区二区三区777 | 视频一区在线免费观看 | 91国模少妇一区二区三区 | 精品视频免费在线 | 国产色综合天天综合网 | 黄页在线播放 | 久久免费福利视频 | 潮喷失禁大喷水无码 | 国产精品边吃奶边做爽 | 欧美456| 影音先锋啪啪资源 | 成人欧美一级特黄 | 九色porny自拍视频在线播放 | 浮妇高潮喷白浆视频 | 五月婷婷激情视频 | 日韩一区二区三区精 | 亚洲第一成人在线 | 香蕉视频 | 久久久情 | 国产精品无码一区二区三 | 成人免费黄色大片 | 天天干天天操天天插 | 成年人黄色小视频 | 国产偷人爽久久久久久老妇app | 一级不卡毛片 | 五月激情四射网 | 国产午夜麻豆影院在线观看 | 精品无人区无码乱码毛片国产 | 毛片av免费 | 婷婷综合影院 | 中日精品一色哟哟 | 久久对白| 丁香久久婷婷 | 午夜精品福利电影 | 日日草夜夜草 | 98成人网 | 亚洲 欧美 中文字幕 | 欧美另类精品xxxx孕妇 | 欧美日性视频 | 视频在线观看电影完整版高清免费 | 亚洲精品久久久久久国产精华液 | 亚洲欧美一区二区三区孕妇 | 国产麻豆精品久久一二三 | www亚洲成人| 超级碰在线视频 | 久久久久麻豆v国产精华液好用吗 | 五月天国产 | 成人区人妻精品一区二区不卡视频 | 日韩欧美成人一区二区三区 | 丰满人妻一区二区三区53 | 91网视频| 精品亚洲国产成人av制服丝袜 | 成人 黄 色 免费播放 | 欧美影院在线 | 狠狠操影视 | 日韩成人免费电影 | 潘金莲激情呻吟欲求不满视频 | 久久丝袜视频 | 国产精品无码一区二区三区 | 亚洲AV蜜桃永久无码精品性色 | 国产无遮挡又黄又爽在线观看 | 亚洲av日韩精品久久久久久久 | 国产黄a三级三级三级 | 男人捅爽女人 | 女优一区二区三区 | 日韩Av无码精品 | 日韩精品中文字幕一区二区 | ass极品水嫩小美女ass | 亚洲一区二区三区影院 | 伊人国产在线观看 | 免费国偷自产拍精品视频 | 成人免费做受小说 | 91在线免费网站 | 精品人妻一区二区三区四区不卡 | 久久97精品 | 91免费高清 | 久久成人国产精品 | 亚洲一区二区视频网站 | 亚洲free性xxxx护士白浆 | 成人超碰在线 | 久久精品—区二区三区舞蹈 | 国产又黄又大又粗视频 | 午夜视频黄色 | 免费一级肉体全黄毛片 | 黄色一级免费视频 | 男女日批在线观看 | 艳母在线视频 | 一本色道久久综合狠狠躁的推荐 | 欧美a一级 | 成人深夜视频在线观看 | 国产精品黄色大片 | 成人网视频| 91九色蝌蚪91por成人 | 男女做受视频 | 欧美gv在线 | 人妻无码久久一区二区三区免费 | 国产精品18久久久 | 在线电影一区二区 | 成年人视屏 |