【SQL】CREATE TABLE をわかりやすく3分で解説

Database

SQLでテーブルを新規作成する場合には "CREATE TABLE" を用います。

CREATE TABLE テーブル名 (
カラム名 データ型 オプション,
~~~
);

このページでは、CREATE TABLE文について1からわかりやすくサンプルコード付きで初心者向けに解説します!

このページで学べる内容
  • CREATE TABLE の基本構文
  • CREATE TABLE のオプション

プログラマーやデータベースエンジニアを目指す方であれば知らないと恥ずかしい超・基本知識。是非最後までご覧ください。

スポンサーリンク

CREATE TABLE

"CREATE TABLE" はテーブルを新規に作成する場合に用いるSQL文です。

基本構文は以下の通り。

CREATE TABLE テーブル名 (
カラム名 データ型 オプション,
~~~
);

作成する "テーブル名" "カラム名" と、各カラムのデータ型や制約について明示していくだけの簡単な構文です。

まずは難しいオプションは指定せずに以下のような単純なテーブル(成績表)を作りたい場合を例にとって解説します。

CREATE TABLE
カラム名データ型(データ長さ)
IDINT(3)
NameVARCHAR(50)
ClassVARCHAR(1)
JapaneseINT(3)
MathINT(3)
EnglishINT(3)
例1)CREATE TABLE

このテーブルを作成する際のSQL文は以下の通り。

CREATE TABLE PointList (
ID       INT(3),
Name     VARCHAR(50),
Class    VARCHAR(1),
Japanese INT(3),
Math     INT(3),
English  INT(3)
);

/* 出来上がったテーブルがこちら
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| ID       | int(3)      | YES  |     | NULL    |       |
| Name     | varchar(50) | YES  |     | NULL    |       |
| Class    | varchar(1)  | YES  |     | NULL    |       |
| Japanese | int(3)      | YES  |     | NULL    |       |
| Math     | int(3)      | YES  |     | NULL    |       |
| English  | int(3)      | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
*/

CREATE TABLEの直後に "テーブル名" を指定し( )の中に "カラム名" と "カラムのデータ型" を記載していくだけです。

カラムは上から順に設定されます。カラムが複数ある場合はカンマで区切ります。

ただし、最後のカラムの後ろにカンマを付与してしまうと構文エラーとなるため注意が必要です。

CREATE TABLE:オプション

テーブルを作成する場合には主キー(Primary Key)の指定やNOT NULL制約の付与などを行うのが一般的です。

この章ではCREATE TABLEの各種オプションについて解説します。

"CREATE TABLE" の主なオプション
  • NOT NULL
    ⇒null値を許可しない
  • PRIMARY KEY
    ⇒主キーを設定
  • UNIQUE
    ⇒重複を許可しない
  • DEFAULT
    ⇒デフォルト値を設定

nullを許可しない:NOT NULL

null値を許可しないカラムとする場合には "NOT NULL" オプションを付与します。

NOT NULL オプション
CREATE TABLE テーブル名 (
カラム名 データ型 NOT NULL,
~~~
);

先ほどのテーブルを例にすると、"ID" 列や "Name" 列はNULL値であってはなりません。したがって、該当の2列にはNOT NULL オプションを付与しておきます。

CREATE TABLE NOT NULL
CREATE TABLE PointList (
ID       INT(3)       NOT NULL,
Name     VARCHAR(50)  NOT NULL,
Class    VARCHAR(1),
Japanese INT(3),
Math     INT(3),
English  INT(3)
);

/* 出来上がったテーブルがこちら
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| ID       | int(3)      | NO   |     | NULL    |       |←Nullが許可されていない
| Name     | varchar(50) | NO   |     | NULL    |       |←Nullが許可されていない
| Class    | varchar(1)  | YES  |     | NULL    |       |
| Japanese | int(3)      | YES  |     | NULL    |       |
| Math     | int(3)      | YES  |     | NULL    |       |
| English  | int(3)      | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
*/
カラム名データ型(データ長さ)NULL
IDINT(3)NO
NameVARCHAR(50)NO
ClassVARCHAR(1)YES
JapaneseINT(3)YES
MathINT(3)YES
EnglishINT(3)YES
例2)CREATE TABLE

もしこのテーブルにID列 or Name列がNULLとなるようなレコードを登録しようとするとエラーが発生するようになります。

続いてはPRIMARY KEYオプションについての解説します。

主キー(プライマリキー)を設定:PRIMARY KEY

主キーとは、"ID" 列のようにレコードを一意に指定する項目のことで、主キーに設定した項目の値は他のレコードとの重複不可 かつ Null値も不可となります。

テーブルの主キーを指定するには "PRIMARY KEY" オプションを指定します。

PRIMARY KEY オプション
CREATE TABLE テーブル名 (
カラム名 データ型 NOT NULL PRIMARY KEY,
~~~
);

利用しているDBMSにもよりますが、基本的にはNOT NULLオプションも付与します。

ID列を主キー(プライマリキー)として定義する場合のサンプルコードがこちら。

CREATE TABLE PointList (
ID       INT(3)       NOT NULL PRIMARY KEY,
Name     VARCHAR(50)  NOT NULL,
Class    VARCHAR(1),
Japanese INT(3),
Math     INT(3),
English  INT(3)
);

/* 出来上がったテーブルがこちら
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| ID       | int(3)      | NO   | PRI | NULL    |       |←主キーが設定されている
| Name     | varchar(50) | NO   |     | NULL    |       |
| Class    | varchar(1)  | YES  |     | NULL    |       |
| Japanese | int(3)      | YES  |     | NULL    |       |
| Math     | int(3)      | YES  |     | NULL    |       |
| English  | int(3)      | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
*/

PRIMARY KEYオプションを付与した列では、値が重複するようなレコードが登録されようとすると同じようにエラーが発生します。

ユニークキーを設定:UNIQUE

ユニークキーとは、値の重複を許可しない項目のことです。

PRIMARY KEYオプションを付与した時と基本的には同じ動きをしますが、ユニークキーの場合はnullが許可され、かつnullだけは重複が許可されます。

ユニークキーを設定するには "UNIQUE" オプションを指定します。

UNIQUE オプション
CREATE TABLE テーブル名 (
カラム名 データ型 UNIQUE,
~~~
);

UNIQUEオプションを付与する場合のサンプルコードはこちら。

CREATE TABLE PointList (
ID       INT(3)       UNIQUE,
Name     VARCHAR(50)  NOT NULL,
Class    VARCHAR(1),
Japanese INT(3),
Math     INT(3),
English  INT(3)
);

/* 出来上がったテーブルがこちら
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| ID       | int(3)      | YES  | UNI | NULL    |       |←UNIQUEオプションが付与されている
| Name     | varchar(50) | NO   |     | NULL    |       |
| Class    | varchar(1)  | YES  |     | NULL    |       |
| Japanese | int(3)      | YES  |     | NULL    |       |
| Math     | int(3)      | YES  |     | NULL    |       |
| English  | int(3)      | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
*/

UNIQUEオプションを付与すると、以下のように重複する値があるとレコード登録がエラーとなります。

CREATE TABLE UNIQUE

デフォルト値を設定:DEFAULT

DEFAULTオプションを付与すると、レコード登録時に値が指定されない場合に、デフォルトで登録される値を指定することができます。

CREATE TABLE テーブル名 (
カラム名 データ型 DEFAULT 'デフォルト値',
~~~
);

DEFAULTオプションを利用したサンプルコードがこちら。

DEFAULT オプション
CREATE TABLE PointList (
ID       INT(3)       NOT NULL PRIMARY KEY,
Name     VARCHAR(50)  NOT NULL,
Class    VARCHAR(1),
Japanese INT(3)       DEFAULT '0',
Math     INT(3)       DEFAULT '0', 
English  INT(3)       DEFAULT '0'
);

/* 出来上がったテーブルがこちら
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| ID       | int(3)      | NO   | PRI | NULL    |       |
| Name     | varchar(50) | NO   |     | NULL    |       |
| Class    | varchar(1)  | YES  |     | NULL    |       |
| Japanese | int(3)      | YES  |     | 0       |       |←デフォルト値0が設定されている
| Math     | int(3)      | YES  |     | 0       |       |←デフォルト値0が設定されている
| English  | int(3)      | YES  |     | 0       |       |←デフォルト値0が設定されている
+----------+-------------+------+-----+---------+-------+
*/

"PhoneNumber" 項目の値が指定されない場合は以下のようにDEFAULTオプションで指定した値が登録されます。

CREATE TABLE DEFAULT
CREATE TABLE のまとめ
  • "CREATE TABLE" はテーブルを新規に作成する場合に用いるSQL文
  • 主なオプションは以下の通り
    • NOT NULL
      ⇒null値を許可しない
    • PRIMARY KEY
      ⇒主キーを設定
    • UNIQUE
      ⇒重複を許可しない
    • DEFAULT
      ⇒デフォルト値を設定
CREATE TABLE PointList (
ID       INT(3)       NOT NULL PRIMARY KEY,
Name     VARCHAR(50)  NOT NULL,
Class    VARCHAR(1),
Japanese INT(3)       DEFAULT '0',
Math     INT(3)       DEFAULT '0', 
English  INT(3)       DEFAULT '0'
);

/* 出来上がったテーブルがこちら
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| ID       | int(3)      | NO   | PRI | NULL    |       |
| Name     | varchar(50) | NO   |     | NULL    |       |
| Class    | varchar(1)  | YES  |     | NULL    |       |
| Japanese | int(3)      | YES  |     | 0       |       |
| Math     | int(3)      | YES  |     | 0       |       |
| English  | int(3)      | YES  |     | 0       |       |
+----------+-------------+------+-----+---------+-------+
*/

システムエンジニアを目指したい方は

システムエンジニアを目指す方や、IT知識を1から身につけたい方は以下のページをご覧ください。

正直どこから学び始めればよいかわからない。どのように勉強していけば、エンジニアとしてのスキルが磨けるか?が分からない・・・という方は必見です。

システムエンジニア向けに「できるエンジニア」になる方法を1から解説しておりますので、是非ご覧ください。

タイトルとURLをコピーしました