Migrationを使ってテーブルを作成するときに、Unique制限で気になったことがあったので実際に試してみた。
気になった個所
複数のカラムに対してUnique制限をかけることができるが、それぞれのカラムに単独で指定することができるのかどうかが気になった。
比較する対象は以下の二つ
$table->unique('login_id'); $table->unique('user_name');
$table->unique(['login_id', 'user_name']);
migrationを実行してみて、どのようなインデックスが貼られるのか確認してみる。
結果
それぞれ単独でUnique制限をかけた場合
+-------+------------+------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | +-------+------------+------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | users | 0 | PRIMARY | 1 | id | A | 0 | NULL | NULL | | BTREE | | | | users | 0 | users_login_id_unique | 1 | login_id | A | 0 | NULL | NULL | | BTREE | | | | users | 0 | users_user_name_unique | 1 | user_name | A | 0 | NULL | NULL | | BTREE | | | | users | 1 | users_no_index | 1 | no | A | 0 | NULL | NULL | | BTREE | | | +-------+------------+------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
配列でまとめてUnique制限をかけた場合
+-------+------------+---------------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | +-------+------------+---------------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | users | 0 | PRIMARY | 1 | id | A | 0 | NULL | NULL | | BTREE | | | | users | 0 | users_login_id_user_name_unique | 1 | login_id | A | 0 | NULL | NULL | | BTREE | | | | users | 0 | users_login_id_user_name_unique | 2 | user_name | A | 0 | NULL | NULL | | BTREE | | | | users | 1 | users_no_index | 1 | no | A | 0 | NULL | NULL | | BTREE | | | +-------+------------+---------------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
Key_nameが違っている。Column_nameは一致しているが、おそらく配列で指定した場合は複合Uniqueになっているのだろう。本当はもっと詳しく調べないといけないが、今回はこれくらいで。
コメント