當我們多次在同一列上添加 UNIQUE 約束時,MySQL 將在該列上為我們添加 UNIQUE 約束的次數創建索引。
示例
假設我們有表“employee”,其中“empid”列有 UNIQUE 約束。可以通過以下查詢進行檢查 –
mysql> Describe employee; +------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+-------------+------+-----+---------+-------+ | empid | int(11) | YES | UNI | NULL | | | first_name | varchar(20) | YES | | NULL | | | last_name | varchar(20) | YES | | NULL | | +------------+-------------+------+-----+---------+-------+ 3 rows in set (0.12 sec)
登錄后復制
現在,當我們運行查詢 SHOW INDEX 時,它會給出索引的名稱,只有一個索引,在“empid”列上創建。
mysql> Show index from employee\G;
*************************** 1. row ***************************
Table: employee
Non_unique: 0
Key_name: empid
Seq_in_index: 1
Column_name: empid
Collation: A
Cardinality: 0
Sub_part: NULL
Packed: NULL
Null: YES
Index_type: BTREE
Comment:
Index_comment:
1 row in set (0.00 sec)
登錄后復制
在以下查詢的幫助下,我們在同一列“empid”上添加了另一個 UNIQUE 約束 –
mysql> Alter table employee ADD UNIQUE(empid); Query OK, 0 rows affected (0.21 sec) Records: 0 Duplicates: 0 Warnings: 0
登錄后復制登錄后復制
現在,當我們運行查詢 SHOW INDEX 時,它會給出索引的名稱,即在“empid”列上創建的兩個索引“empid”和“empid_2”。
mysql> Show index from employee12\G;
*************************** 1. row ***************************
Table: employee
Non_unique: 0
Key_name: empid
Seq_in_index: 1
Column_name: empid
Collation: A
Cardinality: 0
Sub_part: NULL
Packed: NULL
Null: YES
Index_type: BTREE
Comment:
Index_comment:
*************************** 2. row ***************************
Table: employee
Non_unique: 0
Key_name: empid_2
Seq_in_index: 1
Column_name: empid
Collation: A
Cardinality: 0
Sub_part: NULL
Packed: NULL
Null: YES
Index_type: BTREE
Comment:
Index_comment:
2 rows in set (0.00 sec)
登錄后復制
在以下查詢的幫助下,我們在同一列“empid”上添加了另一個 UNIQUE 約束 –
mysql> Alter table employee ADD UNIQUE(empid); Query OK, 0 rows affected (0.21 sec) Records: 0 Duplicates: 0 Warnings: 0
登錄后復制登錄后復制
現在,當我們運行查詢 SHOW INDEX 時,它會給出索引的名稱,在列“empid”上創建的三個索引“empid”和“empid_2”、“empid_3”。
mysql> Alter table employee ADD UNIQUE(empid);
Query OK, 0 rows affected (0.30 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> Show index from employee\G;
*************************** 1. row ***************************
Table: employee
Non_unique: 0
Key_name: empid
Seq_in_index: 1
Column_name: empid
Collation: A
Cardinality: 0
Sub_part: NULL
Packed: NULL
Null: YES
Index_type: BTREE
Comment:
Index_comment:
*************************** 2. row ***************************
Table: employee
Non_unique: 0
Key_name: empid_2
Seq_in_index: 1
Column_name: empid
Collation: A
Cardinality: 0
Sub_part: NULL
Packed: NULL
Null: YES
Index_type: BTREE
Comment:
Index_comment:
*************************** 3. row ***************************
Table: employee
Non_unique: 0
Key_name: empid_3
Seq_in_index: 1
Column_name: empid
Collation: A
Cardinality: 0
Sub_part: NULL
Packed: NULL
Null: YES
Index_type: BTREE
Comment:
Index_comment:
3 rows in set (0.00 sec)
登錄后復制
從這個意義上說,我們可以說,MySQL 將在我們在該列上添加 UNIQUE 約束的次數的列上創建唯一索引。
以上就是如果我多次在同一列上添加 UNIQUE 約束,會發生什么情況?的詳細內容,更多請關注www.92cms.cn其它相關文章!






