mysql多字段唯一約束

(*-*)浩
發布: 2019-05-21 10:39:45
原創
8621 人瀏覽過

MySQL唯一約束(Unique Key)要求該列唯一,允許為空,但只能出現一個空值。唯一約束可以確保一列或幾列不出現重複值。

mysql多字段唯一約束

在建立表格時設定唯一約束

在定義完列之後直接使用UNIQUE 關鍵字指定唯一約束,語法規則如下:

<字段名> <数据类型> UNIQUE
登入後複製

建立資料表tb_dept2,指定部門的名稱唯一,輸入的SQL 語句和執行結果如下所示。

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 的區別:一個表格可以有多個欄位宣告為UNIQUE,但只能有一個PRIMARY KEY 宣告;宣告為PRIMAY KEY 的欄位不允許有空值,但是聲明為UNIQUE 的欄位允許空值的存在。

在修改表時新增唯一限制

在修改表時新增唯一約束的語法格式為:

ALTER TABLE <数据表名> ADD CONSTRAINT <唯一约束名> UNIQUE(<列名>);
登入後複製

修改資料表tb_dept1,指定部門的名稱唯一,輸入的SQL 語句和運行結果如下圖所示。

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)
登入後複製

假設有一個需求是使用者給予評論按讚,資料庫設計是三張表,使用者表t_user,評論表t_comment,按讚表t_praise,其中按讚表中有兩個外鍵分別是user_id和comment_id,分別關聯用戶表的用戶id和評論表的評論id,然後規定一個用戶只能給同一條評論點讚一次,有一種實現方式就是在插入點讚表之前,先通過user_id和comment_id查詢是否有點讚記錄,如果沒有的話,再執行插入操作,否則返回您已經點過讚了.這樣實現的話就會多一次數據庫查詢操作.更好的實現是,修改點讚表的user_id和comment_id為唯一約束,即這兩列不能同時相同,這樣在執行插入操作的話,如果已經點過讚了,數據庫會拋出違反了唯一鍵約束,這樣的話,就可以避免多一次數據庫查詢操作了.具體設置多列為唯一約束的語句是:

UNIQUE KEY <唯一约束名>(<列名>,...,<列名n>)
登入後複製
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`)
)
登入後複製

以上是mysql多字段唯一約束的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!