MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

同じ列にUNIQUE制約を複数回追加するとどうなりますか?


同じ列にUNIQUE制約を複数回追加する場合、MySQLは、UNIQUE制約を追加した回数だけその列にインデックスを作成します。

「empid」列にUNIQUE制約があるテーブル「employee」があるとします。次のクエリから確認できます-

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」列に作成されたインデックスの名前が1つだけ表示されます。

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」にもう1つ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」列に作成された2つのインデックス「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」にもう1つ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」に作成された3つのインデックス「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制約を追加した回数だけ、その列に一意のインデックスを作成すると言えます。


  1. Cプログラムにヘッダーファイルを2回インクルードするとどうなりますか?

    Cヘッダーファイルには、いくつかの定義済み関数が含まれています。たとえば、printf()およびscanf()関数は、stdio.hヘッダーファイルで定義されています。 Cの各ヘッダーファイルには、プログラムを理解しやすくするためのさまざまな定義済み関数が含まれています。 ヘッダーファイルがCプログラムに2回インクルードされると、2番目のファイルは無視されます。実際には、ヘッダーファイルの前にあるインクルードと呼ばれる#は、コンパイルプロセス中に一度だけインクルードされることを保証します。 例1 以下は、3つの数値の平均を計算するためのCプログラムです- #include&l

  2. C#でリストを並べ替える方法は何ですか?

    リストをC#で並べ替えるには、Sort()メソッドを使用します。 まずリストを作成しましょう- List<string> myList = new List<string>(); 次に要素を追加します- myList.Add("Audi"); myList.Add("BMW"); myList.Add("Chevrolet"); myList.Add("Hyundai"); Sort()メソッドを使用してリストを並べ替えます- myList.Sort(); 以下は、C#でリストを並べ