Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

テーブルを生成するSQL文、create tableについてまとめました。

以下、MySQL前提のサンプルコードになります。データベースとして、MySQLのサンプルデータベースEmployeesを使っています。

create table の使い方

CREATE TABLE employees 
  ( 
     emp_no     INT(11) NOT NULL, 
     birth_date DATE NOT NULL, 
     first_name VARCHAR(14) NOT NULL, 
     last_name  VARCHAR(16) NOT NULL, 
     gender     ENUM('M', 'F') NOT NULL, 
     hire_date  DATE NOT NULL, 
     PRIMARY KEY( emp_no ) 
  ) 
engine=innodb 
DEFAULT charset=utf8;

カラム名、INT型、日付型などのデータ型、NULLを許可するか、デフォルト値、プライマリーキーとなるカラムを指定します。

指定可能なオプションには、他にもユニークキー指定やAUTO_INCREMENTなどがあります。

データベース領域のタイプ、文字セットを指定します。

primaryキーを後から追加設定する

PRIMARYキーは、create table文に含めることも出来ますが、Alter table文でテーブル作成後に追加設定が可能です。

ALTER TABLE `employees`
  ADD PRIMARY KEY (`emp_no`);

インデックスキーを一時的にdropしてデータを大量に高速に削除するような運用をおこなう場合は、インデックスのみ設定しなおすためにalter tableで記述したSQLファイルを用意しておくとよいでしょう。

foreignキーを後から追加設定する

foreignキーもPRIMARYキー同様、create table文に含めることが可能です。

しかし、後からインデックスのみ再設定することを想定して、alter table文でSQLファイルを用意しておくのが良いでしょう。

ALTER TABLE `dept_emp`
  ADD CONSTRAINT `dept_emp_ibfk_1` FOREIGN KEY (`emp_no`) REFERENCES `employees` (`emp_no`) ON DELETE CASCADE,
  ADD CONSTRAINT `dept_emp_ibfk_2` FOREIGN KEY (`dept_no`) REFERENCES `departments` (`dept_no`) ON DELETE CASCADE;

default値を後から設定する

ALTER TABLE `salaries` ALTER `salary` `salary` SET DEFAULT '0'

対象カラムの情報をまるごと再設定することも可能です。

ALTER TABLE `salaries` CHANGE `salary` `salary` INT(11) NOT NULL DEFAULT '0' COMMENT '給与';

default値以外に、カラム名、データ型、NULLの許可、カラムコメントの変更が可能です。

selectの結果から、新しいテーブルを作成

select文の結果を使って、新しいテーブルを作成できます。

単純に元のテーブルを複製する場合は、以下のSQLを実行します。

CREATE TABLE employees2 AS 
  SELECT * 
  FROM   employees

employeesテーブルを複製して、employees2テーブルを作成します。

なお、データ構造のみ複製し、データをコピーしたくない場合は以下のSQLを実行します。

CREATE TABLE employees2 AS 
  SELECT * 
  FROM   employees
  WHERE 1=2

WHERE 1=2という条件は常に偽となるため、データはコピーされません。

create table実行時のエラー already exists

create table実行時に、以下のエラーが出力されることがあります。

#1050 - テーブル名 already exists

create tableに「IF NOT EXISTS」をつけることで、テーブルが存在しないときのみテーブルを作成するようになり、エラーを抑制できます。

CREATE TABLE IF NOT EXISTS employees 
  ( 
     emp_no     INT(11) NOT NULL, 
     birth_date DATE NOT NULL, 
     first_name VARCHAR(14) NOT NULL, 
     last_name  VARCHAR(16) NOT NULL, 
     gender     ENUM('M', 'F') NOT NULL, 
     hire_date  DATE NOT NULL, 
     PRIMARY KEY( emp_no ) 
  )

主要DBMSのcreate table関連の差異

Oracleはデフォルト値削除ができない

Oracleでは、テーブルのカラムのデフォルト値を削除するDDLがありません。

デフォルト値にNULLを設定することで、「デフォルト値を設定していない状態」と同じ振る舞いをさせることができます。

MySQLは、テーブル構造を生成するSQL出力可能

mysqlでは、既存データベースからテーブル構造を生成するSQLを出力することが可能です。

mysqldump --no-data データベース名 > tablecreate.sql

create table、create algorithm(ビューのクリエイト)、プライマリキーやインデックス、制約(Foreignキー)の生成が含まれます。

 ・
 ・
 ・
--
-- テーブルの構造 `employees`
--

CREATE TABLE IF NOT EXISTS `employees` (
  `emp_no` int(11) NOT NULL,
  `birth_date` date NOT NULL,
  `first_name` varchar(14) NOT NULL,
  `last_name` varchar(16) NOT NULL,
  `gender` enum('M','F') NOT NULL,
  `hire_date` date NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- --------------------------------------------------------
 ・
 ・
 ・

SQL Serverのselect~into文は独自仕様

SQL Serverでは、selectで抽出したデータでtable createする場合の構文が、MySQLやOracleとは異なります。

SELECT * 
FROM   employees 
INTO   employees2

create tableのまとめ

ポテパンダの一言メモ
  • create table でテーブルを作成できる
  • テーブル作成後にPRIMARYキー制約やForeignキー制約、Default値などの変更が可能
  • DBMSにより、create tableの仕様差異あり

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。