SQLでテーブルを新規作成する場合には "CREATE TABLE" を用います。
CREATE TABLE テーブル名 ( カラム名 データ型 オプション, ~~~ );
このページでは、CREATE TABLE文について1からわかりやすくサンプルコード付きで初心者向けに解説します!
プログラマーやデータベースエンジニアを目指す方であれば知らないと恥ずかしい超・基本知識。是非最後までご覧ください。
SQL文の基本ルール(大文字/小文字の区別、コメントの付与など)を始めに学んでおきたい方は以下の記事を先にご覧ください。
CREATE TABLE
"CREATE TABLE" はテーブルを新規に作成する場合に用いるSQL文です。(固い言い方をすると、テーブルを定義するSQL文です。)
基本構文は以下の通り。
CREATE TABLE テーブル名 ( カラム名 データ型 オプション, ~~~ );
作成する "テーブル名" "カラム名" と、各カラムのデータ型や制約について明示していくだけの簡単な構文です。
まずは難しいオプションは指定せずに以下のような単純なテーブル(成績表)を作りたい場合を例にとって解説します。
カラム名 | データ型(データ長さ) |
---|---|
ID | INT(3) |
Name | VARCHAR(50) |
Class | VARCHAR(1) |
Japanese | INT(3) |
Math | INT(3) |
English | INT(3) |
このテーブルを作成する際の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の各種オプションについて解説します。
nullを許可しない:NOT NULL
null値を許可しないカラムとする場合には "NOT NULL" オプションを付与します。
先ほどのテーブルを例にすると、"ID" 列や "Name" 列はNULL値であってはなりません。したがって、該当の2列には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 |
---|---|---|
ID | INT(3) | NO |
Name | VARCHAR(50) | NO |
Class | VARCHAR(1) | YES |
Japanese | INT(3) | YES |
Math | INT(3) | YES |
English | INT(3) | YES |
もしこのテーブルにID列 or Name列がNULLとなるようなレコードを登録しようとするとエラーが発生するようになります。
続いてはPRIMARY KEYオプションについての解説します。
主キー(プライマリキー)を設定:PRIMARY KEY
主キーとは、"ID" 列のようにレコードを一意に指定する項目のことで、主キーに設定した項目の値は他のレコードとの重複不可 かつ 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 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オプションを付与すると、以下のように重複する値があるとレコード登録がエラーとなります。
デフォルト値を設定:DEFAULT
DEFAULTオプションを付与すると、レコード登録時に値が指定されない場合に、デフォルトで登録される値を指定することができます。
CREATE TABLE テーブル名 ( カラム名 データ型 DEFAULT 'デフォルト値', ~~~ );
DEFAULTオプションを利用したサンプルコードがこちら。
"PhoneNumber" 項目の値が指定されない場合は以下のようにDEFAULTオプションで指定した値が登録されます。
システムエンジニアを目指したい方は
システムエンジニアを目指す方や、IT知識を1から身につけたい方は以下のページをご覧ください。
正直どこから学び始めればよいかわからない。どのように勉強していけば、エンジニアとしてのスキルが磨けるか?が分からない・・・という方は必見です。
システムエンジニア向けに「できるエンジニア」になる方法を1から解説しておりますので、是非ご覧ください。