1つは、インデックス編成テーブルの概念です。
- InnoDBでは、テーブルは主キー構成の順序に従って格納されます。この種のストレージテーブルは、インデックス編成テーブルと呼ばれます。
次に、テーブルの主キーの確認ルール
- InnoDBでは、各テーブルに主キーがあります
- 主キーを確認するためのルールは次のとおりです。
- ①テーブル作成時に指定された主キー
- ②テーブルが作成されるときに主キーが明示的に定義されていない場合は、次のように主キーを選択するか、または作成します。
- 最初に、テーブルに空でない一意のインデックス(一意、nullではない)があるかどうかを判別します。ある場合は、列が主キーです
- テーブルに空でない一意のインデックスが複数ある場合、InnoDBは、テーブルが主キーとして作成されたときに定義された最初の空でない一意のインデックスを選択します。ここで、主キーの選択は、テーブルが作成されたときの列の順序ではなく、インデックスが定義された順序に基づいていることに注意してください(以下のデモンストレーションケースがあります)
- 上記の条件が満たされない場合、InnoDBは自動的に6バイトのポインターを作成します
3.デモケース(_rowid)
- 以下は、テーブルの作成時に主キーが設定されていない場合に、システムによって主キーが自動的に割り当てられることを確認するプロセスを示しています。
_rowidの紹介:
- 役割:テーブルの主キーを表示できます
- 備考: _rowidは、単一の列を主キーとして使用する場合にのみ使用でき、複数の列で構成される主キーには使用できません(以下のデモケース②を参照)。
デモケース①
- ステップ1:テーブルを作成します。cとdが空ではなく一意である場合、MySQLはこれら2つのフィールドのいずれかを主キーとして選択します
create table z( a int not null, b int null, c int not null, d int not null, unique key(b), unique key(d), unique key(c) );
- ステップ2:この時点で3行のデータをテーブルに挿入します
insert into z select 1,2,3,4; insert into z select 5,6,7,8; insert into z select 9,10,11,12;
- ステップ3: _rowidを使用してテーブルの主キーを表示します。_rowidがd列を指していることがわかります。したがって、dはデフォルトでInnoDBによって認識される主キーです。
select a,b,c,d,_rowid from z;
デモケース②
- _rowidは複数の列で構成される主キーには使用できないため、次の簡単な検証
- ステップ1:主キーとしてaとbの構成でテーブルを作成します
create table a(
a int,
b int,
primary key(a,b)
)ENGINE=InnoDB;
- ステップ2:データの行を挿入します
insert into a select 1,1;
- ステップ3:クエリ、エラーに_rowidを再度使用する
select a,_rowid from a;