#schema.sqlの書き方を書いている記事がない
初心者です。実務に入るときに「実務では細かく定義する必要があるからschema.sqlは手動できちんと書きましょう」と言われましたが、書き方を探しても本当に何もないんですよね。ということで、サンプルコード(ここでは、飲食店での食材管理を想定したテーブル)を掲載します!
以下にサンプルコードがあり、その後に軽い解説も入れています。
create table if not exists foodstuff (
id bigint unsigned not null auto_increment comment 'ID',
name varchar(30) not null unique key comment '食品名',
delivery date not null comment '納入日',
expiration_date date not null comment '消費期限',
stock_amount int not null comment '在庫量',
status tinyint(1) not null default 0 comment 'ステータス',
create_time datetime not null default current_timestamp comment '作成日時',
update_time datetime not null default current_timestamp on update current_timestamp comment '更新日時',
primary key (id)
)
character set utf8mb4 engine innodb;
#解説
create table if not exists foodstuff
ここではテーブル名を定義しており、この部分の基本的な形は"create table foodstuff"です。しかし、基本的な形のままだと2回目以降の読み込みの際に再度同じテーブルが作られて同じ名前のテーブルが複数存在することになり、エラーの原因となります。その状況を回避するため、"if not exists"を挿入することで同じ名前のテーブルがすでに存在する場合は再度テーブルを作成しないようにしています。
id bigint unsigned not null auto_increment comment 'ID',
スペースをたくさん入れているのは見やすくするためで、実際の動作に関しては、必要な部分でスペースが1個あれば大丈夫です。
この1行(カンマまで)で1つのカラムを定義しています。左から順にカラム名、データ型(、オプション)です。
"unsigned"というのは符号なしという意味です。IDは1から始まって増えていくだけなので、マイナスは不要なのでこれを付けています。
"not null"は文字通りnullを許容しないというオプションです。
"auto_increment"を指定するとデータを入れたときにそのカラムにすでに入っているデータの中で最大のものよりも1大きい値が自動で入ります。
"comment 'ID'"というのはコメントで、ここに書いたことはデータベースには反映されません。日本語でカラムの説明をしたいときなどに付けます。
status tinyint(1) not null default 0 comment 'ステータス',
この行にあるように、"default 0"などとデフォルトの値を決めることもできます。
create_time datetime not null default current_timestamp comment '作成日時',
update_time datetime not null default current_timestamp on update current_timestamp comment '更新日時',
作成日時と更新日時はこのようになります。"current_timestamp"で現在時刻(データを作成した時刻)を指定できます。この2行に関しては他の書き方があまりないので、どのようなテーブルでも同じようになるのではないでしょうか。
primary key (id)
ここは文字通り、idカラムをprimary keyとして指定するという意味です。
character set utf8mb4 engine innodb;
テーブルの括弧の後でテーブル全体のオプションを指定しています。ここは必要に応じて指定してください。また、テーブルの定義はセミコロンまでなので、セミコロンを付けることをお忘れなく。
#まとめ
最後までお読みいただき、ありがとうございました。間違い等があればコメント欄へお願いします!