同じ列に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制約を追加した回数だけ、その列に一意のインデックスを作成すると言えます。
-
Cプログラムにヘッダーファイルを2回インクルードするとどうなりますか?
Cヘッダーファイルには、いくつかの定義済み関数が含まれています。たとえば、printf()およびscanf()関数は、stdio.hヘッダーファイルで定義されています。 Cの各ヘッダーファイルには、プログラムを理解しやすくするためのさまざまな定義済み関数が含まれています。 ヘッダーファイルがCプログラムに2回インクルードされると、2番目のファイルは無視されます。実際には、ヘッダーファイルの前にあるインクルードと呼ばれる#は、コンパイルプロセス中に一度だけインクルードされることを保証します。 例1 以下は、3つの数値の平均を計算するためのCプログラムです- #include&l
-
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#でリストを並べ