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

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

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 インデックスを作成するには、次の <span style="background-color: rgb(255, 255, 255); color: rgb(68, 68, 68); font-family: " helvetica neue yahei arial sans-serif>CREATE INDEX</span> ステートメントを使用します。

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(&#39;John&#39;,&#39;Doe&#39;,&#39;(408)-999-9765&#39;,&#39;john.doe@mysqltutorial.org&#39;);
ログイン後にコピー

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

電子メールが john.doe@mysqltutorial.org である行を挿入しようとすると、エラー メッセージが表示されます。

INSERT INTO contacts(first_name,last_name,phone,email)
VALUES(&#39;Johny&#39;,&#39;Doe&#39;,&#39;(408)-999-4321&#39;,&#39;john.doe@mysqltutorial.org&#39;);
ログイン後にコピー
ERROR 1062 (23000): Duplicate entry &#39;john.doe@mysqltutorial.org&#39; for key &#39;unique_email&#39;
ログイン後にコピー

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(&#39;john&#39;,&#39;doe&#39;,&#39;(408)-999-9765&#39;,&#39;john.d@mysqltutorial.org&#39;);
ログイン後にコピー
ERROR 1062 (23000): Duplicate entry &#39;john-doe-(408)-999-9765&#39; for key &#39;idx_name_phone&#39;
ログイン後にコピー

[関連する推奨事項: mysql ビデオ チュートリアル ]

以上がmysqlに一意のインデックスを追加する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート