首頁  >  文章  >  資料庫  >  如果我多次在同一列上新增 UNIQUE 約束,會發生什麼情況?

如果我多次在同一列上新增 UNIQUE 約束,會發生什麼情況?

WBOY
WBOY轉載
2023-09-01 12:33:03927瀏覽

如果我多次在同一列上添加 UNIQUE 约束,会发生什么情况?

當我們多次在同一列上新增 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 約束,會發生什麼情況?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除