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

mysql唯一性約束unique代碼示例

 更新時(shí)間:2025年11月13日 09:32:24   作者:a***5261  
這篇文章主要介紹了mysql唯一性約束unique的相關(guān)資料,需要的朋友可以參考下

唯一性約束

1. 作用

用來(lái)限制某個(gè)字段/某列的值不能重復(fù)。

2. 關(guān)鍵字

UNIQUE

3. 特點(diǎn)

  • 同一個(gè)表可以有多個(gè)唯一約束。
  • 唯一約束可以是某一個(gè)列的值唯一,也可以多個(gè)列組合的值唯一。
  • 唯一性約束允許列值為空。
  • 在創(chuàng)建唯一約束的時(shí)候,如果不給唯一約束命名,就默認(rèn)和列名相同。
  • MySQL會(huì)給唯一約束的列上默認(rèn)創(chuàng)建一個(gè)唯一索引。

4. 添加唯一約束

(1)建表時(shí)

在CREATE TABLE時(shí)添加約束
CREATE TABLE test2(
id INT UNIQUE, #列級(jí)約束
last_name VARCHAR(15) ,
email VARCHAR(25),
salary DECIMAL(10,2),
#表級(jí)約束
CONSTRAINT uk_test2_email UNIQUE(email)
);

  • 查看約束

SELECT * FROM information_schema.table_constraints
WHERE table_name = ‘test2';
  • 可以看到,沒(méi)有寫(xiě) 約束名 的時(shí)候以定義的列名 id 來(lái)命名

  • 在創(chuàng)建唯一約束的時(shí)候,如果不給唯一約束命名,就默認(rèn)和列名相同。

INSERT INTO test2(id,last_name,email,salary)
VALUES(1,‘Tom',‘tom@126.com',4500);

#錯(cuò)誤:Duplicate entry ‘1' for key ‘test2.id'
INSERT INTO test2(id,last_name,email,salary)
VALUES(1,‘Tom1',‘tom1@126.com',4600);

#錯(cuò)誤:Duplicate entry ‘tom@126.com' for key ‘test2.uk_test2_email'
INSERT INTO test2(id,last_name,email,salary)
VALUES(2,‘Tom1',‘tom@126.com',4600);
  • 可以向聲明為unique的字段上添加null值。而且可以多次添加null

INSERT INTO test2(id,last_name,email,salary)
VALUES(2,‘Tom1',NULL,4600);

INSERT INTO test2(id,last_name,email,salary)
VALUES(3,'Tom3',NULL,4600);

create table 表名稱(
	字段名  數(shù)據(jù)類型,
    字段名  數(shù)據(jù)類型  unique,  
    字段名  數(shù)據(jù)類型  unique key,
    字段名  數(shù)據(jù)類型
);
create table 表名稱(
	字段名  數(shù)據(jù)類型,
    字段名  數(shù)據(jù)類型,  
    字段名  數(shù)據(jù)類型,
    [constraint 約束名] unique key(字段名)
);

舉例:

create table student(
	sid int,
    sname varchar(20),
    tel char(11) unique,
    cardid char(18) unique key
);


CREATE TABLE t_course(
	cid INT UNIQUE,
	cname VARCHAR(100) UNIQUE,
	description VARCHAR(200)
);



CREATE TABLE USER(
 id INT NOT NULL,
 NAME VARCHAR(25),
 PASSWORD VARCHAR(16),
 -- 使用表級(jí)約束語(yǔ)法
 CONSTRAINT uk_name_pwd UNIQUE(NAME,PASSWORD)
);

表示用戶名和密碼組合不能重復(fù)

insert into student values(1,'張三','13710011002','101223199012015623');
insert into student values(2,'李四','13710011003','101223199012015624');


mysql> select * from student;
+-----+-------+-------------+--------------------+
| sid | sname | tel         | cardid             |
+-----+-------+-------------+--------------------+
|   1 | 張三  | 13710011002 | 101223199012015623 |
|   2 | 李四  | 13710011003 | 101223199012015624 |
+-----+-------+-------------+--------------------+
2 rows in set (0.00 sec)


insert into student values(3,'王五','13710011004','101223199012015624'); #身份證號(hào)重復(fù)
ERROR 1062 (23000): Duplicate entry '101223199012015624' for key 'cardid'

insert into student values(3,'王五','13710011003','101223199012015625'); 
ERROR 1062 (23000): Duplicate entry '13710011003' for key 'tel'

(2)建表后指定唯一鍵約束

#字段列表中如果是一個(gè)字段,表示該列的值唯一。如果是兩個(gè)或更多個(gè)字段,那么復(fù)合唯一,即多個(gè)字段的組合是唯一的
#方式1:
alter table 表名稱 add unique key(字段列表); 


#方式2:
alter table 表名稱 modify 字段名 字段類型 unique;
  • 在ALTER TABLE時(shí)添加約束

UPDATE test2
SET salary = 5000
WHERE id = 3;

#方式1:
ALTER TABLE test2
ADD CONSTRAINT uk_test2_sal UNIQUE(salary);

#方式2:
ALTER TABLE test2
MODIFY last_name VARCHAR(15) UNIQUE;

#字段列表中如果是一個(gè)字段,表示該列的值唯一。如果是兩個(gè)或更多個(gè)字段,那么復(fù)合唯一,即多個(gè)字段的組合是唯一的
#方式1:
alter table 表名稱 add unique key(字段列表); 

5. 關(guān)于復(fù)合唯一約束

create table 表名稱(
	字段名  數(shù)據(jù)類型,
    字段名  數(shù)據(jù)類型,  
    字段名  數(shù)據(jù)類型,
    unique key(字段列表) #字段列表中寫(xiě)的是多個(gè)字段名,多個(gè)字段名用逗號(hào)分隔,表示那么是復(fù)合唯一,即多個(gè)字段的組合是唯一的
);


#學(xué)生表
create table student(
	sid int,	#學(xué)號(hào)
    sname varchar(20),			#姓名
    tel char(11) unique key,  #電話
    cardid char(18) unique key #身份證號(hào)
);

#課程表
create table course(
	cid int,  #課程編號(hào)
    cname varchar(20)     #課程名稱
);

#選課表
create table student_course(
    id int,
	sid int,
    cid int,
    score int,
    unique key(sid,cid)  #復(fù)合唯一
);


insert into student values(1,'張三','13710011002','101223199012015623');#成功
insert into student values(2,'李四','13710011003','101223199012015624');#成功
insert into course values(1001,'Java'),(1002,'MySQL');#成功


mysql> select * from student;
+-----+-------+-------------+--------------------+
| sid | sname | tel         | cardid             |
+-----+-------+-------------+--------------------+
|   1 | 張三  | 13710011002 | 101223199012015623 |
|   2 | 李四  | 13710011003 | 101223199012015624 |
+-----+-------+-------------+--------------------+
2 rows in set (0.00 sec)

mysql> select * from course;
+------+-------+
| cid  | cname |
+------+-------+
| 1001 | Java  |
| 1002 | MySQL |
+------+-------+
2 rows in set (0.00 sec)


insert into student_course values
(1, 1, 1001, 89),
(2, 1, 1002, 90),
(3, 2, 1001, 88),
(4, 2, 1002, 56);#成功


mysql> select * from student_course;
+----+------+------+-------+
| id | sid  | cid  | score |
+----+------+------+-------+
|  1 |    1 | 1001 |    89 |
|  2 |    1 | 1002 |    90 |
|  3 |    2 | 1001 |    88 |
|  4 |    2 | 1002 |    56 |
+----+------+------+-------+
4 rows in set (0.00 sec)


insert into student_course values (5, 1, 1001, 88);#失敗

#ERROR 1062 (23000): Duplicate entry '1-1001' for key 'sid'   違反sid-cid的復(fù)合唯一
  • 刪除唯一約束

  • 添加唯一性約束的列上也會(huì)自動(dòng)創(chuàng)建唯一索引。

  • 刪除唯一約束只能通過(guò)刪除唯一索引的方式刪除。

  • 刪除時(shí)需要指定唯一索引名,唯一索引名就和唯一約束名一樣。

  • 如果創(chuàng)建唯一約束時(shí)未指定名稱,如果是單列,就默認(rèn)和列名相同;如果是組合列,那么默認(rèn)和()中排在第一個(gè)的列名相同。也可以自定義唯一性約束名。

SELECT * FROM information_schema.table_constraints
WHERE table_name = ‘表名'; #查看都有哪些約束

ALTER TABLE USER
DROP INDEX uk_name_pwd;

注意:可以通過(guò) show index from 表名稱; 查看表的索引

總結(jié) 

到此這篇關(guān)于mysql唯一性約束unique的文章就介紹到這了,更多相關(guān)mysql唯一性約束unique內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:

相關(guān)文章

  • ubuntu下磁盤(pán)空間不足導(dǎo)致mysql無(wú)法啟動(dòng)的解決方法

    ubuntu下磁盤(pán)空間不足導(dǎo)致mysql無(wú)法啟動(dòng)的解決方法

    昨天又遇到了MySQL數(shù)據(jù)庫(kù)無(wú)法重啟的問(wèn)題,還以為是權(quán)限的原因,后來(lái)發(fā)現(xiàn)提示是因?yàn)榇疟P(pán)空間不足導(dǎo)致的,通過(guò)查找相關(guān)資料得以解決了,所以下面這篇文章主要介紹了ubuntu下磁盤(pán)空間不足導(dǎo)致mysql無(wú)法啟動(dòng)的解決方法,需要的朋友可以參考下。
    2017-03-03
  • MySql批量插入優(yōu)化Sql執(zhí)行效率實(shí)例詳解

    MySql批量插入優(yōu)化Sql執(zhí)行效率實(shí)例詳解

    這篇文章主要介紹了MySql批量插入優(yōu)化Sql執(zhí)行效率實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • MySql數(shù)據(jù)庫(kù)時(shí)間序列間隔查詢方式

    MySql數(shù)據(jù)庫(kù)時(shí)間序列間隔查詢方式

    這篇文章主要介紹了MySql數(shù)據(jù)庫(kù)時(shí)間序列間隔查詢方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • MySQL?SELECT數(shù)據(jù)查看WHERE(AND?OR?IN?NOT)語(yǔ)句

    MySQL?SELECT數(shù)據(jù)查看WHERE(AND?OR?IN?NOT)語(yǔ)句

    這篇文章主要介紹了MySQL?SELECT數(shù)據(jù)查看WHERE(AND?OR?IN?NOT)de?語(yǔ)句學(xué)習(xí),非常適合新手小白朋友,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • MySQL快速插入大量數(shù)據(jù)的解決方案和代碼示例

    MySQL快速插入大量數(shù)據(jù)的解決方案和代碼示例

    在這篇博客中,我們將深入探討如何高效插入大量數(shù)據(jù)到MySQL數(shù)據(jù)庫(kù),無(wú)論你是數(shù)據(jù)庫(kù)新手還是經(jīng)驗(yàn)豐富的開(kāi)發(fā)者,這篇文章都將為你提供實(shí)用的解決方案和代碼示例,幫助你解決插入3萬(wàn)條數(shù)據(jù)需要20多秒的問(wèn)題,需要的朋友可以參考下
    2024-08-08
  • MySQL中的事件調(diào)度基礎(chǔ)學(xué)習(xí)教程

    MySQL中的事件調(diào)度基礎(chǔ)學(xué)習(xí)教程

    這篇文章主要介紹了MySQL中的事件調(diào)度基礎(chǔ)學(xué)習(xí)教程,本文介紹了對(duì)Event Scheduler的一些基本操作方法,需要的朋友可以參考下
    2015-11-11
  • MySQL索引背后的數(shù)據(jù)結(jié)構(gòu)及算法原理詳解

    MySQL索引背后的數(shù)據(jù)結(jié)構(gòu)及算法原理詳解

    本文以MySQL數(shù)據(jù)庫(kù)為研究對(duì)象,討論與數(shù)據(jù)庫(kù)索引相關(guān)的一些話題。特別需要說(shuō)明的是,MySQL支持諸多存儲(chǔ)引擎,而各種存儲(chǔ)引擎對(duì)索引的支持也各不相同,因此MySQL數(shù)據(jù)庫(kù)支持多種索引類型,如BTree索引,哈希索引,全文索引等等
    2016-12-12
  • mysql查看用戶授權(quán)信息的具體方法

    mysql查看用戶授權(quán)信息的具體方法

    在本篇文章里小編給大家整理的是一篇關(guān)于mysql查看用戶授權(quán)信息的具體方法,有需要的朋友們可以參考下。
    2020-08-08
  • MySQL 備份還原數(shù)據(jù)庫(kù)批處理

    MySQL 備份還原數(shù)據(jù)庫(kù)批處理

    在日常工作中,我們往往需要對(duì)MySQL數(shù)據(jù)庫(kù)進(jìn)行備份,有時(shí)可以通過(guò)拷貝整個(gè)文件,有時(shí)通過(guò)備份整個(gè)庫(kù)還有的時(shí)候我們就只需要備份某個(gè)表。
    2009-07-07
  • MySQL筆記之修改表的實(shí)現(xiàn)方法

    MySQL筆記之修改表的實(shí)現(xiàn)方法

    我們?cè)趧?chuàng)建表的過(guò)程中難免會(huì)考慮不周,因此后期會(huì)修改表。本篇文章就介紹了在mysql中修改表的實(shí)現(xiàn)方法。需要的朋友參考下
    2013-05-05

最新評(píng)論

兰溪市| 拉萨市| 五台县| 武穴市| 陕西省| 南皮县| 红桥区| 吴堡县| 那曲县| 汪清县| 博客| 南澳县| 宾阳县| 海原县| 花垣县| 清镇市| 德州市| 依兰县| 柘荣县| 洪洞县| 开化县| 宝应县| 肃宁县| 隆昌县| 潮安县| 梧州市| 政和县| 永州市| 西丰县| 罗甸县| 科技| 青田县| 罗平县| 慈溪市| 辽源市| 瑞安市| 阳高县| 广灵县| 满洲里市| 靖边县| 中阳县|