MySQL の一意制約 (一意キー) では、カラムが一意であることが必要であり、null も許可されますが、出現できる null 値は 1 つだけです。一意制約により、1 つ以上の列に重複する値が存在しないことが保証されます。
テーブルの作成時に一意制約を設定します。
列を定義した直後に UNIQUE キーワードを使用して、一意制約を指定します。構文規則は次のとおりです。
<字段名> <数据类型> UNIQUE
データ テーブル tb_dept2 を作成し、部門の一意の名前を指定し、次に示すように SQL ステートメントと実行結果を入力します。
mysql> CREATE TABLE tb_dept2 -> ( -> id INT(11) PRIMARY KEY, -> name VARCHAR(22) UNIQUE, -> location VARCHAR(50) -> ); Query OK, 0 rows affected (0.37 sec) mysql> DESC tb_dept2; +----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | name | varchar(40) | YES | UNI | NULL | | | location | varchar(50) | YES | | NULL | | +----------+-------------+------+-----+---------+-------+ 3 rows in set (0.08 sec)
ヒント: UNIQUE と PRIMARY KEY の違い: テーブルには UNIQUE として宣言された複数のフィールドを持つことができますが、PRIMARY KEY 宣言は 1 つだけあります。PRIMAY KEY として宣言された列は NULL 値を持つことができません。ただし、UNIQUE フィールドでは宣言 NULL 値が許可されます。
テーブル変更時に一意制約を追加する
テーブル変更時に一意制約を追加する構文形式は次のとおりです。
ALTER TABLE <数据表名> ADD CONSTRAINT <唯一约束名> UNIQUE(<列名>);
データを変更するtable tb_dept1、指定 部門名は一意です 入力したSQL文と実行結果は以下のとおりです。
mysql> ALTER TABLE tb_dept1 -> ADD CONSTRAINT unique_name UNIQUE(name); Query OK, 0 rows affected (0.63 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> DESC tb_dept1; +----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | name | varchar(22) | NO | UNI | NULL | | | location | varchar(50) | YES | | NULL | | +----------+-------------+------+-----+---------+-------+ 3 rows in set (0.00 sec)
ユーザーがコメントに「いいね!」するという要件があるとします。データベース設計は、ユーザー テーブル t_user、コメント テーブル t_comment、いいね テーブル t_praise の 3 つのテーブルです。いいね テーブルには 2 つの外部キーがあります。 : user_id と comment_id は、それぞれ user テーブルのユーザー ID とコメント テーブルのコメント ID に関連付けられ、ユーザーが同じコメントに「いいね!」できるのは 1 回だけであると規定します。これを実現する 1 つの方法は、user_id と comment_id を介してクエリを実行することです。 like テーブルに挿入する前に、like レコードがあるかどうかを確認します。ない場合は、挿入操作を再度実行します。そうでない場合は、すでに like していることが返されます。この方法で実装すると、データベース クエリ操作が 1 つ増えます。より良い実装は、like テーブルの user_id と comment_id を一意の制約になるように変更することです。つまり、2 つの列を同時に同じにすることはできません。この方法では、挿入操作中にすでに like をクリックしている場合、データベースは一意キー制約の違反をスローします。この場合、データベース クエリ操作をもう 1 回回避できます。特定の設定が多数あります。一意制約としてリストされているステートメントは次のとおりです:
UNIQUE KEY <唯一约束名>(<列名>,...,<列名n>)
以上がmysqlの複数フィールドの一意の制約の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。