MySQLでテーブル作成をする「CREATE TABLE」

MySQLでテーブル作成をする方法を紹介します。

MySQLにおけるテーブル作成の基本形

CREATE TABLE [データベース名.]テーブル名 (カラム1 型情報, カラム2 型情報, ...);

指定データベースに新規テーブルを作成します。「USE」文などで使用するデータベースを指定している場合は、データベース名を省略できます。

テーブル名の文字数・記号

テーブル名には、クォーテーションなしでテーブル名に使える文字は、英数字、アンダーバー「_」、ドル記号「$」です。ハイフン「-」などその他の記号は、クォーテーションなしで使えないので避けたほうが良いです。さらに、テーブル名は64バイト以内となっています。

MySQLにおける予約語

また、MySQLにはCHANGE、EXPLAIN、INDEXなどの予約語があり、予約語をテーブル名に使うのは可能であれば避けたほうが良いでしょう。

テーブル名を予約語にした場合は、テーブル名をクォーテーションで囲む必要があります。

参照:MySQLの予約語と識別子:文字数制限、記号

MySQLのテーブル作成時につかえるオプション

テーブル作成時に、オプションを加えることでより詳細な設定をすることができます。今回は、よく使うオプションを紹介します。

テーブルが存在しなければ作成「IF NOT EXISTS」

CREATE TABLE IF NOT EXISTS [データベース名.]テーブル名 (カラム1 型情報);

テーブル作成時に、同名のテーブルがなければ作成し、テーブルが既に存在する場合はなにもしません。PHPなどのプログラムからデータベースを作成する際などによく使われます。

nullを許可しない「NOT NULL」

CREATE TABLE [データベース名.]テーブル名 (
  カラム1 型情報 NOT NULL,
  カラム2 型情報);

カラムにnullを保存することを許可しません。デフォルトでは、nullを許可する設定となっています。

カラムを連番に設定する「auto_increment」

CREATE TABLE [データベース名.]テーブル名 (
  カラム1 型情報 AUTO_INCREMENT,
  カラム2 型情報
);

AUTO_INCREMENTが設定されたカラムは、新しい行が追加される毎に1ずつ自動加算される連番のカラムとなります。

参照:MySQLでカラムを連番にする「AUTO_INCREMENT」

プライマリーキーを設定する「PRIMARY KEY」

CREATE TABLE [データベース名.]テーブル名 (
  カラム1 型情報 NOT NULL PRIMARY KEY,
  カラム2 型情報
);

カラムの値を重複不可とする場合は、プライマリーキー(主キー)を設定します。この時、同時にNOT NULLも設定する必要があります。さらに、プライマリーキーの設定をすると、そのカラムに対してPRIMARYという名前のインデックスが作成されます。

参照:MySQLで主キー制約を設定する「PRIMARY KEY」

ユニークキーを設定する「UNIQUE」

CREATE TABLE [データベース名.]テーブル名 (
  カラム1 型情報 UNIQUE,
  カラム2 型情報
);

ユニークキーは、カラムの値を重複不可とするという点ではプライマリーキーと同じです。ただし、ユニークキーはnullを保存でき、なおかつnullの値だけは重複可となっています。

カラムのデフォルト値を設定する「DEFAULT」

CREATE TABLE [データベース名.]テーブル名 (
  カラム1 型情報 DEFAULT デフォルト値,
  カラム2 型情報);

カラムへのデータ挿入時に、値が指定されなかった場合にデフォルトで設定される値を指定します。

カラムにインデックスを設定する

CREATE TABLE [データベース名.]テーブル名 (
  カラム1 型情報,
  カラム2 型情報,
  カラム3 型情報,
  INDEX(カラム1, カラム2 ...)
);

指定したカラムに対してインデックスを作成します。また、インデックスは「CREATE INDEX」でも作成できます。

ユーザーテーブルを作成する例

以上のことを踏まえて、userテーブルを作成するクエリの例を紹介します。

CREATE TABLE IF NOT EXISTS user (
  ID    int(11) unsigned AUTO_INCREMENT NOT NULL,
  score int(11) default '0',
  name  text NOT NULL,
  PRIMARY KEY (ID)
);

このクエリは以下のようなテーブルを作成します。

・ID、score, nameの3つのカラム
・IDにAUTO_INCREMENTとプライマリーキーを設定
・scoreにデフォルト値0を設定
・nameはnull不可

インデックスや、プライマリーキー、auto_incrementの詳細に関しては、各項目の説明ページを参照してください。

関連:MySQLでカラムを連番にする「AUTO_INCREMENT」
関連:MySQLで主キー制約を設定する「PRIMARY KEY」
関連:MySQLの予約語と識別子:文字数制限、記号