Mysql中 unique列插入重復(fù)值該怎么解決呢
當(dāng)unique列在一個(gè)UNIQUE鍵上插入包含重復(fù)值的記錄時(shí),我們可以控制MySQL如何處理這種情況:使用IGNORE關(guān)鍵字或者ON DUPLICATE KEY UPDATE子句跳過(guò)INSERT、中斷操作或者更新舊記錄為新值。
mysql> create table menus(id tinyint(4) not null auto_increment,
-> label varchar(10) null,url varchar(20) null,unique key(id));
Query OK, 0 rows affected (0.13 sec)
mysql> insert into menus(label,url) values('Home','home.html');
Query OK, 1 row affected (0.06 sec)
mysql> insert into menus(label,url) values('About us','aboutus.html');
Query OK, 1 row affected (0.05 sec)
mysql> insert into menus(label,url) values('Services','services.html');
Query OK, 1 row affected (0.05 sec)
mysql> insert into menus(label,url) values('Feedback','feedback.html');
Query OK, 1 row affected (0.05 sec)
mysql> select * from menus;
+----+----------+---------------+
| id | label | url |
+----+----------+---------------+
| 1 | Home | home.html |
| 2 | About us | aboutus.html |
| 3 | Services | services.html |
| 4 | Feedback | feedback.html |
+----+----------+---------------+
4 rows in set (0.00 sec)
如果現(xiàn)在在unique列插入一條違背唯一約束的記錄,MySQL會(huì)中斷操作,提示出錯(cuò):
mysql> insert into menus(id,label,url) values(4,'Contact us','contactus.html'); ERROR 1062 (23000): Duplicate entry '4' for key 'id'
在前面的INSERT語(yǔ)句添加IGNORE關(guān)鍵字時(shí),如果認(rèn)為語(yǔ)句違背了唯一約束,MySQL甚至不會(huì)嘗試去執(zhí)行這條語(yǔ)句,因此,下面的語(yǔ)句不會(huì)返回錯(cuò)誤:
mysql> insert ignore into menus(id,label,url) values(4,'Contact us','contactus.html'); Query OK, 0 rows affected (0.00 sec) mysql> select * from menus; +----+----------+---------------+ | id | label | url | +----+----------+---------------+ | 1 | Home | home.html | | 2 | About us | aboutus.html | | 3 | Services | services.html | | 4 | Feedback | feedback.html | +----+----------+---------------+ 4 rows in set (0.00 sec)
當(dāng)有很多的INSERT語(yǔ)句需要被順序地執(zhí)行時(shí),IGNORE關(guān)鍵字就使操作變得很方便。使用它可以保證不管哪一個(gè)INSERT包含了重復(fù)的鍵值,MySQL都回跳過(guò)它(而不是放棄全部操作)。
在這種情況下,我們還可以通過(guò)添加MySQL4.1新增加的ON DUPLICATE KEY UPDATE子句,使MySQL自動(dòng)把INSERT操作轉(zhuǎn)換為UPDATE操作。這個(gè)子句必須具有需要更新的字段列表,這個(gè)列表和UPDATE語(yǔ)句使用的列表相同。
mysql> insert into menus(id,label,url) values(4,'Contact us','contactus.html') -> on duplicate key update label='Contact us',url='contactus.html'; Query OK, 2 rows affected (0.05 sec)
在這種情況下,如果MySQL發(fā)現(xiàn)表已經(jīng)包含具有相同唯一鍵的記錄,它會(huì)自動(dòng)更新舊的記錄為ON DUPLICATE KEY UPDATE從句中指定的新值:
mysql> select * from menus; +----+------------+----------------+ | id | label | url | +----+------------+----------------+ | 1 | Home | home.html | | 2 | About us | aboutus.html | | 3 | Services | services.html | | 4 | Contact us | contactus.html | +----+------------+----------------+ 4 rows in set (0.01 sec)
以上內(nèi)容是小編給大家介紹的Mysql中 unique列插入重復(fù)值該怎么解決的全部教程,希望對(duì)大家有所幫助。
相關(guān)文章
mysql數(shù)據(jù)類型和字段屬性原理與用法詳解
這篇文章主要介紹了mysql數(shù)據(jù)類型和字段屬性,結(jié)合實(shí)例形式分析了mysql數(shù)據(jù)類型和字段屬性基本概念、原理、分類、用法及操作注意事項(xiàng),需要的朋友可以參考下2020-04-04
MySQL中的CONCAT()函數(shù):輕松拼接字符串的利器
這篇文章主要介紹了MySQL中的CONCAT()函數(shù):輕松拼接字符串的利器,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-04-04
MySQL數(shù)據(jù)庫(kù)設(shè)置遠(yuǎn)程訪問權(quán)限方法小結(jié)
很多情況下我們需要遠(yuǎn)程連接mysql數(shù)據(jù)庫(kù),那么就可以參考下面的權(quán)限設(shè)置2013-10-10
SQL使用復(fù)合索引實(shí)現(xiàn)數(shù)據(jù)庫(kù)查詢的優(yōu)化
這篇文章主要介紹了SQL使用復(fù)合索引實(shí)現(xiàn)數(shù)據(jù)庫(kù)查詢的優(yōu)化,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-05-05
關(guān)于mysql數(shù)據(jù)庫(kù)格式化簡(jiǎn)單介紹
本文將介紹關(guān)于mysql數(shù)據(jù)庫(kù)格式化時(shí)需要注意的一些問題,需要的朋友可以參考下2012-11-11
textarea標(biāo)簽(存取數(shù)據(jù)庫(kù)mysql)的換行方法
textarea標(biāo)簽本身不識(shí)別換行功能,回車換行用的是\n換行符,輸入時(shí)的確有換行的效果,但是html渲染或者保存數(shù)據(jù)庫(kù)mysql時(shí)就只是一個(gè)空格了,這時(shí)就需要利用換行符\n和br標(biāo)簽的轉(zhuǎn)換進(jìn)行處理2023-09-09
MySql數(shù)據(jù)庫(kù)基礎(chǔ)知識(shí)點(diǎn)總結(jié)
這篇文章主要介紹了MySql數(shù)據(jù)庫(kù)基礎(chǔ)知識(shí)點(diǎn),總結(jié)整理了mysql數(shù)據(jù)庫(kù)基本創(chuàng)建、查看、選擇、刪除以及數(shù)據(jù)類型相關(guān)操作技巧,需要的朋友可以參考下2020-06-06

