Describeemployee;+------------+-------------+-----+-- -- -+---------+-------+|Bidang |Taip  "/> Describeemployee;+------------+-------------+-----+-- -- -+---------+-------+|Bidang |Taip  ">

Rumah  >  Artikel  >  pangkalan data  >  Apakah yang berlaku jika saya menambah kekangan UNIK pada lajur yang sama beberapa kali?

Apakah yang berlaku jika saya menambah kekangan UNIK pada lajur yang sama beberapa kali?

WBOY
WBOYke hadapan
2023-09-01 12:33:03927semak imbas

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

Apabila kita menambah kekangan UNIK pada lajur yang sama beberapa kali, MySQL akan mencipta indeks pada lajur itu untuk bilangan kali kita menambah UNIK kekangan.

Contoh

Andaikan kita mempunyai jadual "pekerja" dengan kekangan UNIK pada lajur "empid". Ini boleh disemak dengan pertanyaan berikut -

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)

Sekarang apabila kita menjalankan pertanyaan SHOW INDEX ia akan memberikan nama indeks dan hanya terdapat satu indeks, dicipta pada lajur "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)

Dengan bantuan pertanyaan berikut, kami telah menambah satu lagi kekangan UNIK pada lajur "empid" yang sama -

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

Sekarang apabila kami menjalankan pertanyaan SHOW INDEX, Ia akan memberikan nama indeks iaitu dua indeks "empid" dan "empid_2" yang dibuat pada lajur "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)

Dengan bantuan pertanyaan berikut, kami telah menambah satu lagi kekangan UNIK pada lajur "empid" yang sama -

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

Sekarang apabila kami menjalankan pertanyaan SHOW INDEX, Ia akan memberikan nama indeks, tiga indeks "empid" dan "empid_2", "empid_3" yang dibuat pada lajur "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)

Dalam pengertian ini, kita boleh mengatakan bahawa MySQL akan mencipta indeks unik pada lajur berapa kali kita menambah kekangan UNIK pada lajur itu.

Atas ialah kandungan terperinci Apakah yang berlaku jika saya menambah kekangan UNIK pada lajur yang sama beberapa kali?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam