3 つの追加方法: 1. 「CREATE UNIQUE INDEX インデックス名 ON テーブル名 (列名のリスト);」という構文を追加するには、「CREATE INDEX」ステートメントを使用します。 2. テーブルの作成時に追加します。構文 "CREATE TABLE テーブル名 (... UNIQUE KEY (列名リスト));"; 3. テーブルを変更するときに追加される構文は、 "ALTER TABLE テーブル名 ADD CONSTRAINT インデックス名 UNIQUE KEY (列名リスト);" です。 」。
このチュートリアルの動作環境: Windows7 システム、mysql8 バージョン、Dell G3 コンピューター。
mysql の一意のインデックス (UNIQUE)
1 つ以上のカラムに一意の値を強制するには、通常、PRIMARY KEY 制約が使用されます。ただし、各テーブルは主キーを 1 つだけ持つことができます。したがって、複数の列または一意の値を持つ一連の列を含める場合は、主キー制約を使用できません。
幸いなことに、MySQL には UNIQUE インデックスと呼ばれる別のインデックスが用意されており、これを使用すると、値を 1 つ以上のカラムに強制的に一意にすることができます。 PRIMARY KEY インデックスとは異なり、UNIQUE はテーブルごとに複数のインデックスを持つことができます。
UNIQUE インデックスを作成するには、次のCREATE INDEX
ステートメントを使用します。
CREATE UNIQUE INDEX 索引名 ON 表名(列名1,列名2,...);
1 つまたは複数の値の一意性を強制する別の方法列を増やす 1 つの方法は、UNIQUE 制約を使用することです。
UNIQUE 制約を作成すると、MySQL はバックグラウンドでインデックスを UNIQUE 作成します。
次のステートメントは、テーブルの作成時に一意制約を作成する方法を示しています。
CREATE TABLE 表名( ... UNIQUE KEY(列名1,列名2,...) );
ALTER TABLE ステートメントを使用して、既存のテーブルに一意のインデックス (UNIQUE) を追加することもできます
ALTER TABLE 表名 ADD CONSTRAINT 索引名 UNIQUE KEY(列名1,列名2,...);
MySQL UNIQUE インデックスの例
アプリケーションで連絡先を管理するとします。また、連絡先テーブル内の各連絡先の電子メールを一意にする必要もあります。
このルールを適用するには、CREATE TABLE ステートメントで次のように一意制約を作成します。
CREATE TABLE IF NOT EXISTS contacts ( id INT AUTO_INCREMENT PRIMARY KEY, first_name VARCHAR(50) NOT NULL, last_name VARCHAR(50) NOT NULL, phone VARCHAR(15) NOT NULL, email VARCHAR(100) NOT NULL, UNIQUE KEY unique_email (email) );
SHOW INDEXES ステートメントを使用する場合は、次を参照してください。 MySQL UNIQUE は電子メール列のインデックスを作成します。
SHOW INDEXES FROM contacts;
連絡先テーブルに行を挿入しましょう。
INSERT INTO contacts(first_name,last_name,phone,email) VALUES('John','Doe','(408)-999-9765','john.doe@mysqltutorial.org');
電子メールが john.doe@mysqltutorial.org である行を挿入しようとすると、エラー メッセージが表示されます。
INSERT INTO contacts(first_name,last_name,phone,email) VALUES('Johny','Doe','(408)-999-4321','john.doe@mysqltutorial.org');
ERROR 1062 (23000): Duplicate entry 'john.doe@mysqltutorial.org' for key 'unique_email'
必要な first_name、last_name、phone の組み合わせも連絡先間で一意であると仮定します。この場合、次のように CREATE INDEX ステートメント UNIQUE を使用して、これらの列のインデックスを作成できます。
CREATE UNIQUE INDEX idx_name_phone ON contacts(first_name,last_name,phone);
テーブルを結合すると、first_name、last_name、phone がすでに存在するというエラーが発生するため、次の行を連絡先に追加します。
INSERT INTO contacts(first_name,last_name,phone,email) VALUES('john','doe','(408)-999-9765','john.d@mysqltutorial.org');
ERROR 1062 (23000): Duplicate entry 'john-doe-(408)-999-9765' for key 'idx_name_phone'
[関連する推奨事項:mysql ビデオ チュートリアル]
以上がmysqlに一意のインデックスを追加する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。