テーブルを作成する(CREATE TABLE文)

MySQL では新しいテーブルを作成するときに CREATE TABLE 文を使用します。ここでは MySQL で新しいテーブルを作成する方法について解説します。

(Last modified: )

テーブルを作成する

テーブルを作成するには CREATE TABLE 文を使います。書式はオプションが多く複雑なので、ここでは基本となる書式をご紹介します。

CREATE TABLE [IF NOT EXISTS] db_name.tbl_name
    (col_name data_type, ...)

テーブル名( db_name.tbl_name )を指定してテーブルを作成します。テーブルの中に作成するカラムに関してカラム名( col_name )とデータ型( data_type )を指定します。複数のカラムが含まれる場合は、カンマ(,)で区切り続けて記述してください。

USE 文を使ってデータベースを選択している場合に、デフォルトのデータベースにテーブルを作成する場合は db_name を省略できます。

CREATE TABLE [IF NOT EXISTS] tbl_name
    (col_name data_type, ...)

テーブル名およびカラム名はそれぞれ64文字以内で指定してください。またカラムに対して設定するデータ型については「MySQLのデータ型」を参照して下さい。

それでは実際にテーブルを作成してみます。データベースを選択していない状態で次のように実行してください。

create table mydb.user (id int, name varchar(10));

テーブルを作成する(1)

mydb データベースの中にデータベース名 user でテーブルを作成しました。テーブルには 2 つのカラムがあり、 1 つ目のカラムは名前が id データ型が int です。 2 つ目のカラムは名前が name データ型が varchar(10) です。

それでは確認のために mydb データベースの中に作成済みのテーブルの一覧を取得してみます。

show tables from mydb;

テーブルを作成する(2)

先ほど作成した user テーブルが作成されていることが確認できました。

次に使用するデータベースを選択してからテーブルを作成してみます。 use 文を使って mydb データベースを選択し、そのあとでテーブルを作成します。

use mydb;
create table product (id int, name varchar(10), col varchar(10));

テーブルを作成する(3)

それでは確認のために現在接続しているデータベースの中に作成済みのテーブルの一覧を取得してみます。

show tables;

テーブルを作成する(4)

先ほど作成した product テーブルが作成されていることが確認できました。

存在しているテーブルと同じ名前のテーブルを作成した場合

既に存在するテーブルと同じ名前を指定して新しいテーブルを作成しようとするとエラーが発生します。

実際に試してみます。先ほど product というテーブルを作成しましたが、同じ名前で再度テーブルを作ってみます。

create table product (id int, name varchar(10), col varchar(10));

Table 'テーブル名' already exists というエラーが発生しました。

存在しているテーブルと同じ名前のテーブルを作成した場合(1)

テーブルを作成する時に、すでに同じ名前のテーブルが存在している場合はテーブルの作成を行わないようにするには次の書式を使用してください。

CREATE TABLE IF NOT EXISTS db_name.tbl_name
    (col_name data_type, ...)

実際に試してみます。

create table if not exists product (id int, name varchar(10), col varchar(10));

存在しているテーブルと同じ名前のテーブルを作成した場合(2)

既に存在しているテーブル名を指定した場合でもエラーとはなりませんでした。既存のテーブルはそのままで、新しいテーブルは作成されません。

デフォルトの文字セットと照合順序を指定してテーブルを作成する

テーブルを作成するときにテーブルでデフォルトで使用される文字セットと照合順序を指定してテーブルを作成することができます。書式は次の通りです。

CREATE TABLE db_name.tbl_name
    (col_name data_type, ...)
    CHARACTER SET charset_name COLLATE collation_name

テーブルを作成する時に文字セットと照合順序を指定しなかった場合、テーブルが格納されているデータベースで設定されているデフォルトの文字セットと照合順序が使用されます。テーブルに含まれるカラムで明示的に文字セットと照合順序を指定しなかった場合、テーブルで設定されているデフォルトの文字セットと照合順序が使われます。

-- --

最初に文字セットなどを指定しなかった場合にどのようになるのかを確認してみます。例えば先ほど作成した product テーブルが格納されている mydb データベースで設定されているデフォルトの文字セットと照合順序を確認します。

select SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME from INFORMATION_SCHEMA.SCHEMATA where SCHEMA_NAME='mydb';

デフォルトの文字セットは utf8mb4 と照合順序は utf8mb4_0900_ai_ci となっていました。

デフォルトの文字セットと照合順序を指定してテーブルを作成する(1)

product テーブルを作成した時に文字セットなどを明示的に指定していませんでしたので、 product テーブルで設定されているデフォルトの文字セットと照合順序はデータベースで設定されているデフォルトの値が設定されるため、文字セットは utf8mb4 照合順序は utf8mb4_0900_ai_ci となります。

それでは product テーブルのデフォルトの文字セットと照合順序を確認してみます。

show create table product\G

テーブルのデフォルトの文字セットは utf8mb4 と照合順序は utf8mb4_0900_ai_ci となっていました。

デフォルトの文字セットと照合順序を指定してテーブルを作成する(2)

-- --

それではテーブルを作成する時に文字セットと照合順序を指定してみます。MySQL で指定可能な文字セットや文字セット毎に利用できる照合順序については「文字セットと照合順序」を参照されてください。今回は文字セットに cp932 、照合順序に cp932_bin をして指定しています。

create table staff (id int, name varchar(10)) character set cp932 collate cp932_bin;

デフォルトの文字セットと照合順序を指定してテーブルを作成する(3)

それでは作成した staff テーブルのデフォルトの文字セットと照合順序を確認してみます。

show create table staff\G

テーブルのデフォルトの文字セットは cp932 と照合順序は cp932_bin となっていました。

デフォルトの文字セットと照合順序を指定してテーブルを作成する(4)

カラム毎に文字セットと照合順序を指定してテーブルを作成する

テーブルを作成する時にカラム毎に文字セットと照合順序を指定することができます。次の書式を使います。

CREATE TABLE db_name.tbl_name (col_name data_type CHARACTER SET charset_name COLLATE collation_name, ...)

テーブルネーム( db_name.tbl_name )を指定してテーブルを作成します。テーブルの中に作成するカラムに関してカラム名( col_name )、データ型( data_type )、文字セット( charset_name )、照合順序( collation_name )を指定します。複数のカラムが含まれる場合は、カンマ(,)で区切り続けて記述してください。

カラム毎に異なる文字セットと照合順序を指定できますが、指定しなかったカラムについてはテーブルで設定されているデフォルトの文字セットと照合順序が設定されます。

それではテーブルを作成する時にカラムに文字セットと照合順序を指定してみます。

create table address (name varchar(10), address varchar(10) character set cp932 collate cp932_bin);

カラム毎に文字セットと照合順序を指定してテーブルを作成する(1)

それでは作成した address テーブルに含まれるカラムの文字セットと照合順序を確認してみます。

show create table address\G

address テーブルに含まれる name カラムは文字セットなどを指定していませんが、 address カラムについては文字セットは cp932 と照合順序は cp932_bin となっていました。

カラム毎に文字セットと照合順序を指定してテーブルを作成する(2)

デフォルトのストレージエンジンを指定してテーブルを作成する

テーブルを作成するときにテーブルでデフォルトで使用されるストレージエンジンを指定してテーブルを作成することができます。書式は次の通りです。

CREATE TABLE db_name.tbl_name
    (col_name data_type, ...)
    ENGINE engine_name

テーブルを作成する時にデフォルトのストレージエンジンをを指定しなかった場合、テーブルが格納されているデータベースで設定されているストレージエンジンが設定されます。(データベースでデフォルトのストレージエンジンを設定する方法は「ストレージエンジンの種類とデフォルトストレージエンジンの設定」を参照されてください)。

-- --

それでは先ほど作成した product テーブルのデフォルトのストレージエンジンを確認してみます。

show create table product\G

テーブルのデフォルトのストレージエンジンは InnoDB となっていました。

デフォルトのストレージエンジンを指定してテーブルを作成する(1)

-- --

それではテーブルを作成する時にデフォルトのストレージエンジンを指定してみます。

create table sales (shiten int, sales int) engine MyISAM;

デフォルトのストレージエンジンを指定してテーブルを作成する(2)

それでは作成した sales テーブルのデフォルトのストレージエンジンを確認してみます。

show create table sales\G

テーブルのデフォルトのストレージエンジンは MyISAM となっていました。

デフォルトのストレージエンジンを指定してテーブルを作成する(3)

-- --

CREATE TABLE 文を使ってテーブルを作成する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。