Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

จะเกิดอะไรขึ้นถ้าฉันจะเพิ่มข้อจำกัด UNIQUE ในคอลัมน์เดียวกันหลายครั้ง


เมื่อเราจะเพิ่มข้อจำกัด UNIQUE ในคอลัมน์เดียวกันหลายครั้ง MySQL จะสร้างดัชนีในคอลัมน์นั้นหลายครั้งที่เราได้เพิ่มข้อจำกัด UNIQUE

ตัวอย่าง

สมมติว่าเรามีตาราง 'พนักงาน' ซึ่งเรามีข้อจำกัดที่ไม่ซ้ำใครในคอลัมน์ 'empid' สามารถตรวจสอบได้จากแบบสอบถามต่อไปนี้ -

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' เดียวกัน -

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_2' ซึ่งสร้างขึ้นในคอลัมน์ '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)

ด้วยความช่วยเหลือของข้อความค้นหาต่อไปนี้ เราได้เพิ่มข้อจำกัดที่ไม่ซ้ำใครอีกหนึ่งข้อในคอลัมน์ 'empid' เดียวกัน -

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_2', 'empid_3' สร้างขึ้นในคอลัมน์ '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)

ในแง่นี้ เราสามารถพูดได้ว่า MySQL จะสร้างดัชนีเฉพาะบนจำนวนคอลัมน์ที่เราเพิ่มข้อจำกัด UNIQUE ในคอลัมน์นั้น