mysqlに一意のインデックスを追加する方法

青灯夜游
リリース: 2022-06-20 18:50:20
オリジナル
20974 人が閲覧しました

3 つの追加方法: 1. 「CREATE UNIQUE INDEX インデックス名 ON テーブル名 (列名のリスト);」という構文を追加するには、「CREATE INDEX」ステートメントを使用します。 2. テーブルの作成時に追加します。構文 "CREATE TABLE テーブル名 (... UNIQUE KEY (列名リスト));"; 3. テーブルを変更するときに追加される構文は、 "ALTER TABLE テーブル名 ADD CONSTRAINT インデックス名 UNIQUE KEY (列名リスト);" です。 」。

mysqlに一意のインデックスを追加する方法

このチュートリアルの動作環境: 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) );
ログイン後にコピー

mysqlに一意のインデックスを追加する方法

SHOW INDEXES ステートメントを使用する場合は、次を参照してください。 MySQL UNIQUE は電子メール列のインデックスを作成します。

SHOW INDEXES FROM contacts;
ログイン後にコピー

mysqlに一意のインデックスを追加する方法

連絡先テーブルに行を挿入しましょう。

INSERT INTO contacts(first_name,last_name,phone,email) VALUES('John','Doe','(408)-999-9765','john.doe@mysqltutorial.org');
ログイン後にコピー

mysqlに一意のインデックスを追加する方法

電子メールが 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'
ログイン後にコピー

mysqlに一意のインデックスを追加する方法

必要な 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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!