mysql 唯一约束 多字段_mysql多字段唯一约束
MySQL唯一約束(Unique Key)要求該列唯一,允許為空,但只能出現(xiàn)一個(gè)空值。唯一約束可以確保一列或者幾列不出現(xiàn)重復(fù)值。
在創(chuàng)建表時(shí)設(shè)置唯一約束
在定義完列之后直接使用 UNIQUE 關(guān)鍵字指定唯一約束,語(yǔ)法規(guī)則如下: UNIQUE
創(chuàng)建數(shù)據(jù)表 tb_dept2,指定部門的名稱唯一,輸入的 SQL 語(yǔ)句和運(yùn)行結(jié)果如下所示。mysql> CREATE TABLE tb_dept2
-> (
-> id INT(11) PRIMARY KEY,
-> name VARCHAR(22) UNIQUE,
-> location VARCHAR(50)
-> );
Query OK, 0 rows affected (0.37 sec)
mysql> DESC tb_dept2;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(40) | YES | UNI | NULL | |
| location | varchar(50) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.08 sec)
提示:UNIQUE 和 PRIMARY KEY 的區(qū)別:一個(gè)表可以有多個(gè)字段聲明為 UNIQUE,但只能有一個(gè) PRIMARY KEY 聲明;聲明為 PRIMAY KEY 的列不允許有空值,但是聲明為 UNIQUE 的字段允許空值的存在。
在修改表時(shí)添加唯一約束
在修改表時(shí)添加唯一約束的語(yǔ)法格式為:ALTER TABLE ADD CONSTRAINT UNIQUE();
修改數(shù)據(jù)表 tb_dept1,指定部門的名稱唯一,輸入的 SQL 語(yǔ)句和運(yùn)行結(jié)果如下所示。mysql> ALTER TABLE tb_dept1
-> ADD CONSTRAINT unique_name UNIQUE(name);
Query OK, 0 rows affected (0.63 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> DESC tb_dept1;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(22) | NO | UNI | NULL | |
| location | varchar(50) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
假設(shè)有一個(gè)需求是用戶給評(píng)論點(diǎn)贊,數(shù)據(jù)庫(kù)設(shè)計(jì)是三張表,用戶表t_user,評(píng)論表t_comment,點(diǎn)贊表t_praise,其中點(diǎn)贊表中有兩個(gè)外鍵分別是user_id和comment_id,分別關(guān)聯(lián)用戶表的用戶id和評(píng)論表的評(píng)論id,然后規(guī)定一個(gè)用戶只能給同一條評(píng)論點(diǎn)贊一次,有一種實(shí)現(xiàn)方式就是在插入點(diǎn)贊表之前,先通過(guò)user_id和comment_id查詢是否有點(diǎn)贊記錄,如果沒(méi)有的話,再執(zhí)行插入操作,否則返回您已經(jīng)點(diǎn)過(guò)贊了.這樣實(shí)現(xiàn)的話就會(huì)多一次數(shù)據(jù)庫(kù)查詢操作.更好的實(shí)現(xiàn)是,修改點(diǎn)贊表的user_id和comment_id為唯一約束,即這兩列不能同時(shí)相同,這樣在執(zhí)行插入操作的話,如果已經(jīng)點(diǎn)過(guò)贊了,數(shù)據(jù)庫(kù)會(huì)拋出違反了唯一鍵約束,這樣的話,就可以避免多一次數(shù)據(jù)庫(kù)查詢操作了.具體設(shè)置多列為唯一約束的語(yǔ)句是:UNIQUE KEY (,...,)CREATE TABLE `t_praise` (
`id` int(12) unsigned NOT NULL AUTO_INCREMENT,
`comment_id` int(12) NOT NULL,
`user_id` int(12) NOT NULL,
KEY `FK_t_praise_comment` (`comment_id`),
KEY `FK_t_praise_user` (`user_id`),
UNIQUE KEY `UK_praise` (`comment_id`,`user_id`)
)
總結(jié)
以上是生活随笔為你收集整理的mysql 唯一约束 多字段_mysql多字段唯一约束的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: PID:我应该何时计算积分项?
- 下一篇: PC软件开发技术之一:在WinCC中通过