環境
mysql 5.7
laravel 8.75
ユニークとは?
たとえば、ログイン機能を作ります。
emailカラムは他のユーザーと重複することを禁止したいです。
その時!emailにユニーク制約をかけることで
emailカラムは重複値を許容しなくなります。
Mysql Raw Sqlでユニークをかける方法(usersテーブルを作成する時にかける場合)
CREATE TABLE users (
email varchar(50) UNIQUE,
...
)
Mysql Raw Sqlでユニークをかける方法(既にusersテーブルがある場合)
ALTER TABLE テーブル名
ADD カラム名 タイプ UNIQUE
Laravelのマイグレーションでユニーク制約をかける方法(usersテーブルを作成する時にかける場合)
![image.png (95.4 kB)](https://qiita-user-contents.imgix.net/https%3A%2F%2Fimg.esa.io%2Fuploads%2Fproduction%2Fattachments%2F5658%2F2023%2F10%2F30%2F145821%2F06cf70bb-bad9-4f6b-a4c1-241ee45b1573.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=767d431e3a9db0a8ac41f79968910fe3)
ユニークにしたいカラム->unique()
を指定すればOK。
Laravelのマイグレーションでユニーク制約をかける方法(既にusersテーブルがある場合)
![스크린샷 2023-10-30 오전 11.20.59.png (74.2 kB)](https://qiita-user-contents.imgix.net/https%3A%2F%2Fimg.esa.io%2Fuploads%2Fproduction%2Fattachments%2F5658%2F2023%2F10%2F30%2F145821%2Ff148d69b-1f86-4899-adef-522ddc50f09f.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=8bfe171baa63d5c347bb23586ca3dd0e)
もっと条件を入れたい場合
たとえば、部署が違う人のであれば、同じemailアドレスを許容したい!
どうすればいいでしょうか。
二つのカラムにそれぞれユニークをかける?
そうなると部署が同じユーザーは作れなくなりますね。
ユニーク制約には複数のカラムを登録することができます。
コードで見ると
このようにです。
このように複数のカラムにユニーク制約をかけることを
複合ユニーク(Composite Unique)と言います。
今回の例で言うと(部署、メールアドレス)ペアが同じ値だと許容しないことになります。
これで部署が違う場合同じメールアドレスでも会員登録ができるようになります。
3つのカラムで複合ユニークを登録すると、3つの値が全部同じ場合許容しなくなることになります。