MySQLで多対多の関係で片方をuniqueにしたい
UserとLanguageというEntityとuser_languagesという関係データベースが存在するとして、Userは複数のLanguageを持っているとし、Languageは複数のUserに持たれているとします。
user
id
languages
language
id
name <- 同じnameのエントリーが複数追加されてしまう。
user_language
user_id
language_id
このような場合のlanguage
のある要素(name
)の重複をなくすようなオプションはありますでしょうか。つまり別のuser
が持っているlanguage
を登録した時にすでにそのlanguage
がlanguages
テーブルに存在するときにuser_language
にそのすでに存在するlanguage
のid
を登録し、languages
テーブルにはインサートしないようにしたいです。INSERT INTO "languages" ("name") VALUES ('JPN');
を入力した時にした時に重複を避けることは可能でしょうか。
name
にunique
を指定するとエラーがでてしまいました。
Error 1062: Duplicate entry 'ENG' for key 'name'
ちなみにlanguages
のスキーマは下記のようになっています。
+-------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(255) | NO | MUL | NULL | |
+-------+------------------+------+-----+---------+----------------+
name
にはindex:idx_name_code
を設定しています。