เมื่อเราจะเพิ่มข้อจำกัด 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 ในคอลัมน์นั้น