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

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

(Last modified: )

テーブルを作成する

ユーザーを作成するには CREATE TABLE 文を使います。書式は次の通りです(非常に長いので一部のみ掲載しています)。

CREATE [OR REPLACE] [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    (create_definition,...) [table_options    ]... [partition_options]
CREATE [OR REPLACE] [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    [(create_definition,...)] [table_options   ]... [partition_options]
    select_statement
CREATE [OR REPLACE] [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
   { LIKE old_table_name | (LIKE old_table_name) }

select_statement:
    [IGNORE | REPLACE] [AS] SELECT ...   (Some legal select statement)
create_definition:
  { col_name column_definition | index_definition | period_definition | CHECK (expr) }

column_definition:
  data_type
    [NOT NULL | NULL] [DEFAULT default_value | (expression)]
    [ON UPDATE [NOW | CURRENT_TIMESTAMP] [(precision)]]
    [AUTO_INCREMENT] [ZEROFILL] [UNIQUE [KEY] | [PRIMARY] KEY]
    [INVISIBLE] [{WITH|WITHOUT} SYSTEM VERSIONING]
    [COMMENT 'string'] [REF_SYSTEM_ID = value]
    [reference_definition]
  | data_type [GENERATED ALWAYS] 
  AS { { ROW {START|END} } | { (expression) [VIRTUAL | PERSISTENT | STORED] } }
      [UNIQUE [KEY]] [COMMENT 'string']

constraint_definition:
   CONSTRAINT [constraint_name] CHECK (expression)

この中でも基本となる部分は次のとおりです。

CREATE TABLE tbl_name (col_name data_type,...)

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

USE 文を使ってデータベースを選択していない場合は、どのデータベースにテーブルを作成するのかを示すために tbl_name の代わりに db_name.tbl_name のように記述します。

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

それでは実際にテーブルを作成してみます。 MariaDB へ接続したあとテーブルを作成する mydb データベースを選択してください。

use mydb;

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

テーブルを作成するため次のように実行してください。

create table drink (id int, name varchar(10));

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

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

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

show tables;

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

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

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

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

実際に試してみます。先ほど drink というテーブルを作成しましたが、同じ名前でもう一度テーブルを作ってみます(カラムの構成は変えています)。

create table drink (id int, name varchar(10), price int);

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

「Table 'drink' already exists」というエラーが表示されました。このように既に作成済みのテーブルと同じ名前のテーブルを作成しようとするとエラーとなります。

IF NOT EXISTS

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

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

同じ名前のテーブル名が存在しない場合はテーブルを作成し、同じ名前のテーブルが存在している場合は何もしません。

実際に試してみます。作成済みのテーブル同じ名前でもう一度テーブルを作ってみます。

create table if not exists drink (id int, name varchar(10), price int);

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

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

なお 1 warning と表示されているようにエラーは出ていませんが警告は表示されています。下記のように実行することで警告の内容を確認できます。

show warnings;

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

警告の内容は IF NOT EXISTS を付けずに既存のテーブルと同じ名前でテーブルを作成しようとしたときに表示されたエラーと同じ内容でした。

OR REPLACE

テーブルを作成する時に、同じ名前のテーブルが存在したときは存在したテーブルを削除して新しいテーブルを作成するには次の書式を使用してください。

CREATE OR REPLACE TABLE tbl_name (col_name data_type,...)

同じ名前のテーブルが存在した場合は削除した上で新しいテーブルを作成します。

実際に試してみます。作成済みのテーブル同じ名前でもう一度テーブルを作ってみます(カラムの構成は変えてあります)。

create or replace table drink (id int, name varchar(10), price int);

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

同じ名前のテーブルが既に存在していましたが、エラーにならずに新しいテーブルが作成されました。元々作成されていたテーブルは削除されています。

確認のために作成済みのテーブルのカラムの構成を確認してみます。

show create table drink;

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

カラムの構成から指定した名前のテーブルが、新しく作成したテーブルに置き換わっていることが確認できました。

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

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

CREATE TABLE tbl_name (col_name data_type,...)
  | [DEFAULT] CHARACTER SET [=] charset_name
  | [DEFAULT] COLLATE [=] collation_name

テーブルのデフォルトの文字セットと照合順序を charset_name と collation_name でそれぞれ指定してください。文字セットと照合順序を指定しない場合、テーブルが格納されているデータベースで設定されているデフォルトの文字セットと照合順序が使用されます。

それでは実際に試してみます。まずデフォルトの文字セットと照合順序を指定せずにテーブルを作成した場合です。テーブルを作成する前にテーブルが格納されるデータベースで設定されているデフォルトの文字セットと照合順序を確認します。次のように実行してください。

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

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

データベースに設定されているデフォルトの文字コードは utf8mb4 で、デフォルトの照合順序は utf8mb4_general_ci でした。

ではデフォルトの文字コードと照合順序を指定せずにテーブルを作成します。次のように実行してください。

create table test1 (id int);

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

テーブルが作成されました。

作成したテーブルに設定されているデフォルトの文字コートと照合順序を確認します。次のように実行してください。

select TABLE_NAME,TABLE_COLLATION from INFORMATION_SCHEMA.TABLES where TABLE_NAME='test1';

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

取得した照合順序からデフォルトの文字コードが utf8mb4 で照合順序が utf8mb4_general_ci になっていることが確認できます。このようにテーブルを作成するときに明示的に指定しない場合は、テーブルが格納されるデータベースで設定されているデフォルトの文字コードと照合順序がテーブルに設定されます。

今度はデフォルトの文字コードと照合順序を指定してテーブルを作成します。次のように実行してください。

create table test2 (id int) character set cp932 collate cp932_bin;

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

デフォルトの文字コードに cp932 、デフォルトの照合順序に cp932_bin を指定してテーブルを作成しました。

それでは作成したテーブルに設定されているデフォルトの文字コートと照合順序を確認します。次のように実行してください。

select TABLE_NAME,TABLE_COLLATION from INFORMATION_SCHEMA.TABLES where TABLE_NAME='test2';

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

取得した照合順序からデフォルトの文字コードが cp932 、デフォルトの照合順序が cp932_bin になっていることが確認できます。

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

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

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

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

それでは実際に試してみます。次のように実行してください。

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

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

作成したテーブルには 2 つのカラムが含まれますが、 name カラムには文字コートと文字セットを指定しました。 id カラムには指定していないのでテーブルに設定されているデフォルトの文字コートと照合順序が設定されます。

作成したテーブルのカラム毎に設定されている文字コートと照合順序を確認します。次のように実行してください。

select COLUMN_NAME,CHARACTER_SET_NAME,COLLATION_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='test3';

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

明示的に指定した name カラムについて、文字コードと照合順序が設定されていることが確認できます。

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

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

CREATE TABLE tbl_name (col_name data_type,...)
  [STORAGE] ENGINE [=] engine_name

テーブルのストレージエンジンを engine_name で指定します。明示的に指定しなかった場合は、テーブルが格納されるデータベースで設定されているデフォルトのストレージエンジンが設定されます。

それでは実際に試してみます。まずストレージエンジンを指定せずにテーブルを作成した場合です。現在データベースのデフォルトのストレージエンジンは InnoDB に設定されています。次のように実行してください。

create table test4 (id int);

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

それでは作成したテーブルのストレージエンジンを確認してみます。次のように実行してください。

select TABLE_NAME,ENGINE from INFORMATION_SCHEMA.TABLES where TABLE_NAME='test4';

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

作成したテーブルのストレージエンジンが InnoDB になっていることが確認できました。

今度はストレージエンジンを指定してテーブルを作成します。次のように実行してください。

create table test5 (id int) engine = MyISAM;

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

ストレージエンジンとして MyISAM を指定してテーブルを作成しました。

それでは作成したテーブルのストレージエンジンを確認してみます。次のように実行してください。

select TABLE_NAME,ENGINE from INFORMATION_SCHEMA.TABLES where TABLE_NAME='test5';

ストレージエンジンを指定してテーブルを作成する(4)

作成したテーブルのストレージエンジンが MyISAM になっていることが確認できました。

-- --

MariaDB で新しいテーブルを作成する方法について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。