ホームページ  >  記事  >  データベース  >  mysqlの主キーはインデックスですか?

mysqlの主キーはインデックスですか?

青灯夜游
青灯夜游オリジナル
2021-12-27 17:40:286212ブラウズ

mysql の主キーはインデックスではありません。主キーの正式名称は「主キー制約」で、テーブル内のデータに対する制約であり、テーブル内の各情報を一意に識別できるテーブルの特殊なフィールドであり、インデックスはデータで構成される特別なデータベース構造。テーブル内の 1 つ以上の列の組み合わせ。データ テーブル内の特定の値を持つレコードを迅速にクエリするために使用できます。

mysqlの主キーはインデックスですか?

このチュートリアルの動作環境: Windows7 システム、mysql8 バージョン、Dell G3 コンピューター。

MySQL 主キー

MySQL では、主キー (PRIMARY KEY) の正式名称は「主キー制約」であり、MySQL で最も頻繁に使用される制約です。通常の状況では、DBMS がテーブル内のレコードをより速く検索できるようにするために、テーブルに主キーが設定されます。

制約とは、テーブル内のデータに対する制約を指します。これは、データベース管理者がデータベースをより適切に管理し、データベース内のデータの正確性と有効性を確保するのに役立ちます。

主キーは、テーブル内の各情報を一意に識別するテーブル内の特別なフィールドです。例えば、学生情報テーブルの学生番号は一意である。

主キーは、単一フィールドの主キーと複数フィールドの結合主キーに分かれており、このセクションでは、これら 2 つの主キー制約の作成、変更、削除についてそれぞれ説明します。

主キーを使用する場合は、次の点に注意する必要があります。

  • 各テーブルには、主キーを 1 つだけ定義できます。

  • 主キー値はテーブル内の各行を一意に識別する必要があり、NULL にすることはできません。つまり、テーブル内に同じ主キー値を持つデータ行が 2 つ存在することはできません。これが一意性の原則です。

  • #フィールド名は、結合主キー フィールド テーブルに 1 回だけ出現できます。

  • 結合主キーには、不必要な冗長フィールドを含めることはできません。結合主キーのフィールドが削除されたときに、残りのフィールドで構成される主キーがまだ一意性の原則を満たしている場合、結合主キーは正しくありません。これが最小化の原理です。

テーブルの作成時に主キー制約を設定します。

データ テーブルの作成時に主キー制約を設定します。テーブルの場合は、テーブルのフィールドに主キーを設定するか、テーブルの複数のフィールドに結合主キーを設定します。ただし、どの方法を使用する場合でも、テーブル内に存在できる主キーは 1 つだけです。単一フィールドの主キーと複数フィールドの結合主キーの設定方法を説明します。

1) 単一フィールドの主キーを設定する

CREATE TABLE ステートメントで、PRIMARY KEY キーワードを使用して主キーを指定します。

フィールドを定義するときに主キーを指定します。構文形式は次のとおりです:

<字段名> <数据类型> PRIMARY KEY [默认值]

例 1

test_db データベースに tb_emp3 データ テーブルを作成します。 is id、SQL文、実行結果は以下の通りです。

mysql> CREATE TABLE tb_emp3
    -> (
    -> id INT(11) PRIMARY KEY,
    -> name VARCHAR(25),
    -> deptId INT(11),
    -> salary FLOAT
    -> );
Query OK, 0 rows affected (0.37 sec)

mysql> DESC tb_emp3;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int(11)     | NO   | PRI | NULL    |       |
| name   | varchar(25) | YES  |     | NULL    |       |
| deptId | int(11)     | YES  |     | NULL    |       |
| salary | float       | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.14 sec)

または、すべてのフィールドを定義した後に主キーを指定します。構文形式は次のとおりです:

[CONSTRAINT <约束名>] PRIMARY KEY [字段名]

例 2

test_db データベースに tb_emp4 データ テーブルを作成し、主キーは id で、SQL ステートメントと実行結果は次のとおりです。

mysql> CREATE TABLE tb_emp4
    -> (
    -> id INT(11),
    -> name VARCHAR(25),
    -> deptId INT(11),
    -> salary FLOAT,
    -> PRIMARY KEY(id)
    -> );
Query OK, 0 rows affected (0.37 sec)
mysql> DESC tb_emp4;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int(11)     | NO   | PRI | NULL    |       |
| name   | varchar(25) | YES  |     | NULL    |       |
| deptId | int(11)     | YES  |     | NULL    |       |
| salary | float       | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.14 sec)

2) テーブル作成時に結合主キーを設定する

いわゆる結合主キーとは、主キーがテーブル内の複数のフィールドで構成されることを意味します。 。

たとえば、学生のコース選択データ テーブルを設定する場合、学生番号を主キーとして使用する必要がありますか、それともコース番号を主キーとして使用する必要がありますか?学生番号を主キーとして使用する場合、学生は 1 つのコースのみを選択できます。コース番号を主キーとして使用する場合、コースを選択できるのは 1 人の学生だけです。明らかに、これらの状況はどちらも非現実的です。

実際、学生のコース選択スケジュールを設計する際、学生は同じコースを 1 回しか選択できないという制限があります。したがって、学生番号とコース番号を主キーとしてまとめることができ、これが結合主キーになります。

主キーは複数のフィールドで構成されています。構文形式は次のとおりです:

PRIMARY KEY [字段1,字段2,…,字段n]

注: 主キーが複数のフィールドで構成されている場合、主キー制約を直後に宣言することはできません。フィールド名。

例 3

データ テーブル tb_emp5 を作成します。テーブルに主キー ID がないと仮定します。従業員を一意に識別するために、主キーとして name と deptId を組み合わせることができます。 . SQL文と実行結果は以下の通りです。

mysql> CREATE TABLE tb_emp5
    -> (
    -> name VARCHAR(25),
    -> deptId INT(11),
    -> salary FLOAT,
    -> PRIMARY KEY(name,deptId)
    -> );
Query OK, 0 rows affected (0.37 sec)
mysql> DESC tb_emp5;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| name   | varchar(25) | NO   | PRI | NULL    |       |
| deptId | int(11)     | NO   | PRI | NULL    |       |
| salary | float       | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
3 rows in set (0.14 sec)

テーブル変更時に主キー制約を追加

主キー制約は、テーブルの作成時に作成できるだけでなく、テーブルを変更するときに追加されます。ただし、主キー制約として設定されたフィールドでは null 値は許可されないことに注意してください。

データ テーブルを変更するときに主キー制約を追加するための構文形式は次のとおりです:

ALTER TABLE <数据表名> ADD PRIMARY KEY(<字段名>);

tb_emp2 データ テーブルのテーブル構造を表示します。SQL ステートメントと実行結果は次のとおりです。

mysql> DESC tb_emp2;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int(11)     | NO   |     | NULL    |       |
| name   | varchar(30) | YES  |     | NULL    |       |
| deptId | int(11)     | YES  |     | NULL    |       |
| salary | float       | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.14 sec)

例 4

データ テーブル tb_emp2 を変更し、フィールド ID を主キーとして設定する SQL ステートメントと実行結果は次のとおりです。

mysql> ALTER TABLE tb_emp2
    -> ADD PRIMARY KEY(id);
Query OK, 0 rows affected (0.94 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> DESC tb_emp2;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int(11)     | NO   | PRI | NULL    |       |
| name   | varchar(30) | YES  |     | NULL    |       |
| deptId | int(11)     | YES  |     | NULL    |       |
| salary | float       | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.12 sec)

通常、テーブルを変更するときにテーブル内のフィールドの主キー制約を設定する場合は、主キー制約として設定されたフィールドの値が重複できないことを確認する必要があります。空であってはなりません。そうしないと、主キー制約を設定できません。

MySQL インデックス (インデックス)

インデックスは、データ テーブル内の 1 つ以上の列で構成される特別なデータベース構造です。これを使用すると、データベース内の特定の列をすばやくクエリできます。データテーブル: 特定の値の記録。

インデックスを使用してデータをクエリする場合、レコード内のすべての情報を読み取る必要はなく、インデックス列をクエリするだけで済みます。それ以外の場合、データベース システムは照合のために各レコードのすべての情報を読み取ります。

この索引は、新華辞典の発音順序と比較できます。たとえば、「く」という単語を調べたい場合、発音順序を使用しない場合、400 ページの辞書からページごとに検索する必要があります。ただし、ピンインを抽出して発音シーケンスを作成する場合は、10 ページを超える発音表から直接検索するだけで済みます。これにより時間を大幅に節約できます。

インデックスの利点と欠点

インデックスには明らかな利点と避けられない欠点があります。

利点

インデックスの利点は次のとおりです:

  • 一意のインデックスを作成することにより、データベース テーブル内のデータの各行の一意性が高まります。保証することができます。

  • すべての MySQL 列タイプにインデックスを設定できます。

  • を使用すると、データ クエリを大幅に高速化できます。これがインデックスを使用する主な理由です。

  • データの参照整合性を実現するという点で、テーブル間の接続を高速化できます。

  • データ クエリにグループ化句と並べ替え句を使用すると、クエリ内のグループ化と並べ替えの時間も大幅に削減できます

欠点

インデックスの増加には、主に次のような多くの欠点もあります。

  • インデックス グループの作成と維持に時間がかかり、データ量が増えると費やす時間も増加します。 。

  • インデックスはディスク領域を占有する必要があります。データ テーブルが占有するデータ領域に加えて、各インデックスは一定量の物理領域も占有します。多数のインデックスがある場合、インデックス ファイルはデータ ファイルよりも早く最大ファイル サイズに達する可能性があります。

  • テーブル内のデータが追加、削除、および変更されると、インデックスも動的に維持する必要があるため、データのメンテナンス速度が低下します。

インデックスを使用する場合は、インデックスの長所と短所を考慮する必要があります。

インデックスを使用するとクエリの速度が向上しますが、レコードの挿入速度に影響します。インデックス付きテーブルにレコードを挿入するとき、データベース システムはインデックスに従って並べ替えるため、レコードの挿入速度が低下します。大量のレコードを挿入する場合、速度への影響はより顕著になります。この場合、最初にテーブル内のインデックスを削除し、次にデータを挿入し、挿入が完了した後にインデックスを作成するのが最善の方法です。

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

以上がmysqlの主キーはインデックスですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。