Computer >> Máy Tính >  >> Lập trình >> MySQL

Điều gì xảy ra nếu tôi thêm một ràng buộc DUY NHẤT trên cùng một cột trong nhiều lần?


Khi chúng ta thêm ràng buộc DUY NHẤT trên cùng một cột nhiều lần thì MySQL sẽ tạo chỉ mục trên cột đó trong một số lần chúng ta đã thêm ràng buộc DUY NHẤT.

Ví dụ

Giả sử chúng ta có bảng "worker" trong đó chúng ta có ràng buộc DUY NHẤT trên cột "empid". Nó có thể được kiểm tra dưới dạng truy vấn sau -

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)

Bây giờ, khi chúng tôi chạy truy vấn SHOW INDEX, nó cung cấp tên của chỉ mục, chỉ một chỉ mục, được tạo trên cột ‘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)

Với sự trợ giúp của truy vấn sau, chúng tôi đã thêm một ràng buộc DUY NHẤT nữa trên cùng một cột ‘empid’ -

mysql> Alter table employee ADD UNIQUE(empid);
Query OK, 0 rows affected (0.21 sec)
Records: 0 Duplicates: 0 Warnings: 0

Bây giờ, khi chúng tôi chạy truy vấn SHOW INDEX, nó cung cấp tên của chỉ mục, hai chỉ mục ‘empid’ và ‘empid_2’, được tạo trên cột ‘empid’.

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)

Với sự trợ giúp của truy vấn sau, chúng tôi đã thêm một ràng buộc DUY NHẤT nữa trên cùng một cột ‘empid’ -

mysql> Alter table employee ADD UNIQUE(empid);
Query OK, 0 rows affected (0.21 sec)
Records: 0 Duplicates: 0 Warnings: 0

Bây giờ, khi chúng tôi chạy truy vấn SHOW INDEX, nó cung cấp tên của chỉ mục, ba chỉ mục ‘empid’ và ‘empid_2’, ‘empid_3’được tạo trên cột‘ empid ’.

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)

Theo nghĩa này, chúng ta có thể nói rằng MySQL sẽ tạo các chỉ mục duy nhất trên cột số lần chúng ta đã thêm ràng buộc DUY NHẤT trên cột đó.