SQLのcreate tableについてまとめています。
SQL create tableの構文
create table文の構文は、以下の通り。カラム名の定義は、カラム名、データ型、NULL許可、デフォルト値を指定に加え、特定のカラムをプライマリキーに指定することが可能です。
以下は、MySQLにてデモデータベースのemployeesのemployeesテーブル(データベース名とテーブル名が同じ)を作成するSQLです。
CREATE TABLE `employees` ( `emp_no` int NOT NULL, `birth_date` date NOT NULL, `first_name` varchar(14) DEFAULT 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=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
create tableには多彩なオプションがあり、Oracle、MySQLなどデータベース管理ソフトごとに異なる拡張がされています。ここでは、主要なデータベースに共通している部分のみ紹介します。
例えば、MySQLのcreate tableの正確な構文は以下の通り。
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name (create_definition,...) [table_options] [partition_options] : :
create definition(create定義)、table options(テーブルオプション)、partition optons(パーティションオプション)などの詳細はこちらを参照してください。
参考)MySQL :: MySQL 5.6 リファレンスマニュアル :: 13.1.17 CREATE TABLE 構文
作成したテーブルの構造は、descにて確認できます。
mysql> desc employees; +------------+---------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+---------------+------+-----+---------+-------+ | emp_no | int | NO | PRI | NULL | | | birth_date | date | NO | | NULL | | | first_name | varchar(14) | YES | | NULL | | | last_name | varchar(16) | NO | | NULL | | | gender | enum('M','F') | NO | | NULL | | | hire_date | date | NO | | NULL | | +------------+---------------+------+-----+---------+-------+ 6 rows in set (0.01 sec)
Fieldはカラム名、Typeはデータ型、NULLはNOの場合NULL不許可を表します。KeyにPRIとあるのはプライマリキー、Defaultはデフォルト値、Extraはカラムごとにコメント(注釈)をつけたときに表示される項目です。
なお、作成済みのテーブルのカラム情報を変更したり、プライマリキーを変更するには一度テーブルをドロップしてから再度create tableを実行する(データはすべて削除される)か、alter tableで属性を変更します。
【関連記事】
▶SQL ALTER TABLEのサンプルSQL データベース製品によって、機能拡張が異なる
SQL create tableの使い方
既存のテーブルから、create文を生成する
SQL形式でのダンプ機能を持つDBMSの場合、既存のテーブルからcreate table文を生成することが可能です。
例えば、MySQLの場合はmysqldumpというコマンドで、SQL形式でのデータダンプが可能。
mysqldump -u ユーザ名 -pパスワード --no-data employees > dump.sql mysqldump: [Warning] Using a password on the command line interface can be insecure.
–no-dataはデータはダンプせず、テーブル構造だけダンプするオプションです。出力先のダンプファイル名をdump.sqlとしています。また、Warningはコマンドラインでパスワードを直接指定したことによる警告です。
全テーブルがダンプされるので、目的のテーブル部分だけ抜き出せば、create table文が取得できます。以下は、ダンプしたファイルのうち、employees(社員)テーブルをcraete tableする箇所です。
: : -- -- Table structure for table `employees` -- DROP TABLE IF EXISTS `employees`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `employees` ( `emp_no` int NOT NULL, `birth_date` date NOT NULL, `first_name` varchar(14) DEFAULT NULL, `last_name` varchar(16) NOT NULL, `gender` enum('M','F') NOT NULL, :
SQL形式でのダンプに対応していないデータベースの場合、ネイティブな管理ソフトウェアに「逆エンジニアリング」機能が付属していることがあります。また、フリーウェアA5:SQL Mk-2を使って、create table文を生成することも可能です。
【関連記事】
▶MySQLのテーブル作成 既存DBからのDDL生成はエクスポート機能を使う
まとめ
- create tableはカラム定義やプライマリキーを指定してテーブルを作成するコマンド
- 作成済みのテーブルのカラム攻勢を変更するにはdropして再度create tableするかalter tableを実行
- 既存テーブルからダンプ機能や管理ツールでcreate table文を逆生成することもできる