はい、MySQLはこれを行う機能を提供します。
ALTER TABLE MyTable
ADD UNIQUE KEY `my_unique_key` (`group_id`, `user_id`)
このテーブルを何に使用しているのかわかりませんが、この一意のキーがテーブルの主キーの有力な候補である可能性があります。主キーは自動的に一意のキーにもなります。これを主キーにする場合は、代わりに次の手順を実行してください。
ALTER TABLE MyTable
ADD PRIMARY KEY (`group_id`, `user_id`)
(すでに主キーが存在するというエラーメッセージが表示された場合は、ALTER TABLE MyTable DROP PRIMARY KEY
を発行します。 次に、上記のコマンドを繰り返します。)
編集: ユーザーのコメントに応えて
NULL
以外の同一の行を複数持つことはできません 一意キーでカバーされる列の値。したがって、group_id = 0 AND user_id = 5
の2つの行を持つことはできません。 、 例えば。 0は値です。ただし、一方または両方の列をnull許容にすると、できます NULL
の配置まで同一の複数の行があります s。したがって、group_id IS NULL AND user_id = 1234
である2つ(またはそれ以上)の行を持つことができます。 。
ただし、上記は、一般的に使用される両方のMySQLストレージエンジン(MyISAMとInnoDB)に当てはまります。 MySQLには、NULL
のストレージエンジンがあります は一意の値と見なされますが、おそらくそれらを使用していません。
一方または両方の列をNULL可能にすると、一意のキーを主キーにすることはできません。主キーは、NOT NULL
の列に配置する必要があります。 。
このキーを主キーにし、NULL
を許可したいとします。 group_id
内 桁。 group_id
のデータ型がわかりません 現時点でです。現在はINT UNSIGNED NOT NULL
だと思います 、ただし、これでない場合は、以下を変更する必要があります。このキーを主キーとして使用できなくなります。必要な変更を加えるために実行できるコマンドは次のとおりです。
ALTER TABLE MyTable
DROP PRIMARY KEY,
MODIFY group_id INT UNSIGNED,
ADD UNIQUE KEY `my_unique_key_with_nulls` (`group_id`, `user`)