InnoDB
テ,ブルを作成するには,特別な句を付けずに创建表
ステ,トメントを使用します。以前は,引擎= InnoDB
句が必要でしたが,InnoDB
がデフォルトのストレ,ジエンジンとなったため必要なくなりました。(デフォルトのストレ,ジエンジンがMyISAM
であるMySQL 5.1以前が実行されているサ,バ,上で,, mysqldumpまたはレプリケ,ションを使用して创建表
ステ,トメントを再現する予定がある場合は,その句を引き続き使用できます。)
——默认存储引擎= InnoDB。创建表t1 (a INT, b CHAR(20),主键(a));向后兼容旧的MySQL。创建表t2 (a INT, b CHAR(20),主键(a)))引擎=InnoDB;
innodb_file_per_table
の設定に応じて,InnoDB
ではシステムテ,ブルスペ,ス内またはテ、ブルごとの別個のテ、ブルスペ、ス(.ibdファaapl .ルで表されます)内に,各テ,ブルおよび関連付けられた主キ,ンデックスが作成されます。MySQLでは,MySQLデ,タベ,スディレクトリの下にある测验
ディレクトリ内に,t1.frm
およびt2.frm
ファ@ @ルが作成されます。内部的に,InnoDB
独自のデ,タディクショナリにテ,ブルのエントリが追加されます。このエントリには,デ,タベ,ス名が含まれます。たとえば,t1
テ,ブルが作成されるデ,タベ,スが测验
である場合,エントリは“测试/ t1”
となります。つまり,ほかのいくつかのデータベースに同じ名前t1
のテ,ブルを作成でき,InnoDB
内部でテ,ブル名の競合は発生しません。
これらのテ,ブルのプロパティ,を表示するには,显示表状态
ステ,トメントを発行します。
显示表状态从测试像't%' \G;
ステ,タスの出力には,これらの1番目のテ,ブルの行フォ,マットプロパティ,が“紧凑”
であることが表示されます。この設定は基本的な実験には適していますが,もっとも強力なInnoDB
のパフォ,マンス機能を活用するには,すぐに“动态”
や“压缩”
などのその他の行フォ,マットの使用に進んでください。これらの値を使用するには,最初に少しの設定が必要です。
设置全局innodb_file_per_table=1;设置全局innodb_file_format=barracuda;CREATE TABLE t3 (a INT, b CHAR (20), PRIMARY KEY (a))) row_format=dynamic;CREATE TABLE t4 (a INT, b CHAR (20), PRIMARY KEY (a)) row_format=compressed;
必ず,InnoDB
テ,ブルごとに主キを設定し,次のようなカラム(複数の場合あり)を指定してください。
もっとも重要なクエリ,で参照される。
ブランクのままになっていない。
重複する値がない。
挿入後に値が変更されるとしても,きわめてまれである。
たとえば,人に関する情報を含むテーブルでは,複数の人が同じ名前を持つ可能性もあり,名字をブランクにしたり,名前を変更したりする人もいるため,(名、姓)
上には主キ,を作成しません。制約が非常に多く,主キーとして使用する明確なカラムセットがないことも多い場合には,主キーの全部または一部として機能する数値IDの新しいカラムを作成してください。行が挿入されると自動的に昇順の値が入力されるように,自動@ @ンクリメントカラムを宣言できます。
——ID的值可以充当不同表中相关项之间的指针。创建表t5 (id INT AUTO_INCREMENT, b CHAR(20),主键(id));主键可以包含多个列。任何autoinc列都必须放在前面。创建表t6 (id INT AUTO_INCREMENT, a INT, b CHAR(20),主键(id,a));
主キ,を定義しなくてもテ,ブルは正常に機能しますが,主キーは多くのパフォーマンス要素に関連し,大きなテーブルや頻繁に使用されるテーブルにとって重要な設計要素です。常に创建表
ステ,トメントで指定することを習慣にしてください。(テ,ブルを作成し,デ,タをロ,ドしてから,ALTER TABLE
を実行してあとで主キーを追加する場合の操作は,テーブルの作成時に主キーを定義するよりも大幅に時間がかかります)。