mysql の主キーはインデックスではありません。主キーの正式名称は「主キー制約」で、テーブル内のデータに対する制約であり、テーブル内の各情報を一意に識別できるテーブルの特殊なフィールドであり、インデックスはデータで構成される特別なデータベース構造。テーブル内の 1 つ以上の列の組み合わせ。データ テーブル内の特定の値を持つレコードを迅速にクエリするために使用できます。
このチュートリアルの動作環境: Windows7 システム、mysql8 バージョン、Dell G3 コンピューター。
MySQL では、主キー (PRIMARY KEY) の正式名称は「主キー制約」であり、MySQL で最も頻繁に使用される制約です。通常の状況では、DBMS がテーブル内のレコードをより速く検索できるようにするために、テーブルに主キーが設定されます。
制約とは、テーブル内のデータに対する制約を指します。これは、データベース管理者がデータベースをより適切に管理し、データベース内のデータの正確性と有効性を確保するのに役立ちます。
主キーは、テーブル内の各情報を一意に識別するテーブル内の特別なフィールドです。例えば、学生情報テーブルの学生番号は一意である。
主キーは、単一フィールドの主キーと複数フィールドの結合主キーに分かれており、このセクションでは、これら 2 つの主キー制約の作成、変更、削除についてそれぞれ説明します。
主キーを使用する場合は、次の点に注意する必要があります。
各テーブルには、主キーを 1 つだけ定義できます。
主キー値はテーブル内の各行を一意に識別する必要があり、NULL にすることはできません。つまり、テーブル内に同じ主キー値を持つデータ行が 2 つ存在することはできません。これが一意性の原則です。
テーブルの作成時に主キー制約を設定します。
データ テーブルの作成時に主キー制約を設定します。テーブルの場合は、テーブルのフィールドに主キーを設定するか、テーブルの複数のフィールドに結合主キーを設定します。ただし、どの方法を使用する場合でも、テーブル内に存在できる主キーは 1 つだけです。単一フィールドの主キーと複数フィールドの結合主キーの設定方法を説明します。1) 単一フィールドの主キーを設定する
CREATE TABLE ステートメントで、PRIMARY KEY キーワードを使用して主キーを指定します。 フィールドを定義するときに主キーを指定します。構文形式は次のとおりです:<字段名> <数据类型> PRIMARY KEY [默认值]例 1test_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 [字段名]例 2test_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 サイトの他の関連記事を参照してください。