MySQLのテーブル作成の方法について、サンプルSQLを紹介しながらまとめています。
以下、データベースとして、MySQLのサンプルデータベースEmployeesを使っています。SQL実行結果の表示にはphpMyAdminを使用しています。
MySQLのテーブル作成構文
create table文でテーブルを作成します。
CREATE TABLE テーブル名 ( カラム名1 型1 NULL許可1 デフォルト値1, カラム名2 型2 NULL許可2 デフォルト値2, : カラム名n 型n NULL許可n デフォルト値n PRIMARY KEY ( 主キーとなるカラム名 ) ) ENGINE = ストレージエンジン DEFAULT CHARSET = 文字コード
カラムの型は、varcharやtext、int、floatなどを指定します。NULL許可、デフォルト値など、カラム名と型以外は省略可能です。
参考)MySQL :: MySQL 5.6 リファレンスマニュアル :: 13.1.17 CREATE TABLE 構文
例えば、Employeesデータベースのemployeesテーブルと全く同じ構造を持つemployees2を作成するには、以下のSQLを実行します。
CREATE TABLE `employees2` ( `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
実行すると、以下の構造を持つemployees2が作成されます。
テーブル存在時にエラーを抑制するには、IF NOT EXISTSを使用
テーブルがすでに存在する状態で、create table文を実行すると、以下のエラーとなります。
#1050 - Table 'employees2' already exists
エラーを回避するには、以下のように「IF NOT EXISTS」を使用します。
CREATE TABLE IF NOT EXISTS `employees2` ( `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
上記を実行すると、employees2テーブルが存在しなければテーブルを作成し、すでに存在すれば何もせずにSQLを終了します。
既存のテーブルをコピーして、テーブル作成
既存のテーブルと全く同じ構造の場合、テーブル構造をコピーして別テーブルを作成することができます。
CREATE TABLE employees3 like employees
テーブル構造に加えて、主キーやインデックスも同じテーブルが作成されます。データはコピーされません。
データをコピーするには、以下のようにします。
insert employees3 select * from employees
上記SQLを実行すると、employees(社員)テーブルからデータをコピーし、employees3テーブルに挿入します。
【関連記事】
▶MySQL Insert サンプルコード集 一文で一括挿入する方法とは?
既存データベースのDDL(テーブル作成用SQL)を出力する
既存データベースから、テーブル作成用のDDL(Data Define Languate。テーブルを生成するSQL)を出力するにはMySQLのエクスポート機能を利用します。
phpMyAdminからおこなう場合は、上記のイメージのように対象データベースを選択してから、「エクスポート」タブをクリックし、エクスポート方法の「詳細 – 可能なオプションを全て表示」にチェックします。
フォーマットを「SQL」に指定して、「フォーマット特有のオプション」で、「構造」にチェックを入れます。
「実行」をクリックすると、DDLがファイル出力されます。
「テーブルの構造 テーブル名」のコメントのあとに、テーブルごとのDDLが出力されています。
コマンドラインから実行する場合は、以下のコマンドを実行します。
mysqldump -u データベースユーザ名 -p パスワード -d データベース名 > 出力ファイル名
-dオプションは、データなしで構造のみデータベースダンプするためのオプションです。このオプションを指定しないと、データベースのデータを全て含む、巨大なSQLを出力してしまうので注意しましょう。
ER図ツールから、テーブル作成SQLを生成する
テーブル設計をおこなってテーブル作成SQLを生成する場合、SQL生成機能を備えたER図ツールが便利です。
MySQLの付属ツールであるMySQL WorkbenchにはER図の機能があり、既存のデータベースからER図を作成するリバースエンジニアリング機能、ER図からテーブル作成をおこなうフォワードエンジニアリング機能が備わっています。
もともと、MySQL Workbenchは英語版のみなのですが、日本語化をおこなうファイルが公開されていて、簡単に日本語化できます。
【関連記事】
▶MySQL Workbench 8.0を日本語化して、ER図でリバースエンジニアリング
フリーのER図ツール A5M2
20年以上ものあいだ、ずっとバージョンアップ・バグフィックスが行われているフリーのSQL開発ツール、A5:SQL Mk-2(エーファイブ・エスキューエル・マークツー)というフリーウェアがあります。
開発者の間では、通称A5M2と呼ばれています。
参考)A5:SQL Mk-2 – フリーの汎用SQL開発ツール/ER図ツール .. 松原正和
Oracle、MS SQL Server、PostgreSQL、MySQLに対応し、軽量でサクサク動くのが特徴。データベースからER図生成、ER図からデータベース生成ができます。
Excel形式のテーブル定義書の出力も可能。
テーブルが増えてきたときの視認性アップの工夫も秀逸で、ページやサブタイプという考えを取り入れて見やすく表示できるようになってます。日本の開発現場で求められるような、見栄えのようER図が、このツールで作れるんですね。
まとめ
- MySQLでテーブル作成をおこなうには、create table文を実行する
- 既存のテーブルと同じ構造のテーブルを作るには、create table … like文を実行
- MySQLのダンプ(エクスポート)機能を利用して、DDLを出力可能
- ER図ツール、A5M2は見やすいER図とデータベース、テーブル定義書が生成できる