欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解MySQL主鍵唯一鍵重復(fù)插入解決方法

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

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

CREATE TABLE stuInfo (
  id INT NOT NULL COMMENT '序號(hào)',
  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='學(xué)生表';
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當(dāng)插入的值遇到主鍵(PRIMARY KEY)或者唯一鍵(UNIQUE KEY)重復(fù)時(shí)自動(dòng)忽略重復(fù)的記錄行,不影響后面的記錄行的插入。

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

運(yùn)行結(jié)果:

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)

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

2. REPLACE

使用replace當(dāng)插入的記錄遇到主鍵或者唯一鍵重復(fù)時(shí)先刪除表中重復(fù)的記錄行再插入。

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
運(yùn)行結(jié)果:
 
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

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

DROP TABLE  IF EXISTS stuInfo;
CREATE TABLE stuInfo (
  id INT NOT NULL COMMENT '序號(hào)',
  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='學(xué)生表';

在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;

相當(dāng)于:

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

運(yùn)行結(jié)果:

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;

相當(dāng)于:

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

運(yùn)行結(jié)果:

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)

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

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

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

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

相關(guān)文章

  • mysql存儲(chǔ)過程與函數(shù)學(xué)習(xí)與實(shí)踐方式

    mysql存儲(chǔ)過程與函數(shù)學(xué)習(xí)與實(shí)踐方式

    下面小編就為大家分享一篇mysql存儲(chǔ)過程與函數(shù)學(xué)習(xí)與實(shí)踐方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • MySQL表和列的注釋總結(jié)

    MySQL表和列的注釋總結(jié)

    在本篇文章里小編給大家分享了關(guān)于MySQL表和列的注釋相關(guān)知識(shí)點(diǎn)內(nèi)容總結(jié),需要的朋友們學(xué)習(xí)下。
    2019-05-05
  • MySQL中存儲(chǔ)時(shí)間的最佳實(shí)踐指南

    MySQL中存儲(chǔ)時(shí)間的最佳實(shí)踐指南

    這篇文章主要給大家介紹了關(guān)于MySQL中存儲(chǔ)時(shí)間的最佳實(shí)踐,文中詳細(xì)介紹了哪種存儲(chǔ)時(shí)間的方式更好,對(duì)大家學(xué)習(xí)或者使用mysql具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-07-07
  • MySQL 處理重復(fù)數(shù)據(jù)的方法(防止、刪除)

    MySQL 處理重復(fù)數(shù)據(jù)的方法(防止、刪除)

    這篇文章主要介紹了MySQL 處理重復(fù)數(shù)據(jù)的方法,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • 一文了解MySQL事務(wù)隔離級(jí)別

    一文了解MySQL事務(wù)隔離級(jí)別

    這篇文章主要介紹了一文了解MySQL事務(wù)隔離級(jí)別,MySQL?事務(wù)隔離級(jí)別是為了解決并發(fā)事務(wù)互相干擾的問題的,文章介紹?4?種事物隔離,需要的小伙伴可以學(xué)習(xí)一下
    2022-07-07
  • mysql如何設(shè)置不區(qū)分大小寫

    mysql如何設(shè)置不區(qū)分大小寫

    在本篇文章里小編給大家整理了關(guān)于mysql設(shè)置不區(qū)分大小寫的方法,需要的朋友們跟著學(xué)習(xí)下。
    2020-06-06
  • MySQL索引查詢limit?offset及排序order?by用法

    MySQL索引查詢limit?offset及排序order?by用法

    這篇文章主要介紹了MySQL限制數(shù)據(jù)返回條數(shù)limit?offset及排序order?by用法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • MySQL全文檢索的實(shí)現(xiàn)示例

    MySQL全文檢索的實(shí)現(xiàn)示例

    全文搜索是一種在文本字段中查找關(guān)鍵詞的功能。在MySQL中,我們可以使用全文搜索來提高查詢的效率,本文主要介紹了MySQL全文檢索的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-04-04
  • MySQL中的log_bin_trust_function_creators系統(tǒng)變量

    MySQL中的log_bin_trust_function_creators系統(tǒng)變量

    本文主要介紹了MySQL中的log_bin_trust_function_creators系統(tǒng)變量,log_bin_trust_function_creators是一個(gè)全局系統(tǒng)變量,下面就來介紹一下具體使用,感興趣的可以了解一下
    2024-09-09
  • Mysql-Insert插入過慢的原因記錄和解決方案

    Mysql-Insert插入過慢的原因記錄和解決方案

    這篇文章主要介紹了Mysql-Insert插入過慢的原因記錄和解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08

最新評(píng)論