Database環境の構築
DatabaseとSchemaの作成
フォーラムの概要は大体決めたので、設計したテーブルを作成します。
mysqlコマンドを実行して順次必要なテーブルを作成することもできますが、今回はスキーマーを定義したスクリプトファイルを作ってスキーマーを作成します。
テキストファイルにcreate table文を記述していきます。
create database forum;
use forum;
create table category(
cat_id smallint(5) UNSIGNED auto_increment,
cat_name varchar(100),
PRIMARY KEY (cat_id)
);
create table forum(
forum_id smallint(5) UNSIGNED auto_increment,
cat_id smallint(5) UNSIGNED,
forum_name varchar(100),
topic_count mediumint(8) UNSIGNED default 0,
PRIMARY KEY (forum_id)
);
create table topic(
topic_id mediumint(8) UNSIGNED auto_increment,
forum_id smallint(5) UNSIGNED,
reply_count mediumint(8) UNSIGNED default 0,
last_post_date datetime,
PRIMARY KEY (topic_id)
);
create table post_message(
post_id mediumint(8) UNSIGNED auto_increment,
topic_id mediumint(8) UNSIGNED,
post_subject varchar(100),
post_msg text,
post_user varchar(30),
post_date datetime,
parent_post_id mediumint(8) UNSIGNED default 0,
PRIMARY KEY (post_id)
);
insert into category(cat_name) values ('Programming');
insert into forum(cat_id,forum_name) values (1,'VC++');
insert into forum(cat_id,forum_name) values (1,'php');
このスクリプトは、1行目でDatabaseを作成しています。
2行目は、その後のSQL文を実行する対象となるデータベースをforumに指定しています。
以降、テーブルの作成とサンプルデータの追加です。(SQL文の区切りはセミコロンです。忘れないように!)
スクリプトができたら実際に流してみます。
$ mysql -u root -p
mysql>source スクリプトファイル
おまけ
- use文はconnect文でも同じようなことができます。
- auto_incrementはサイクリックではないようです。ちなみにOracleのようなSequence(順序)は無いようです。
後日発覚したのですが、MySQLはOracleのようにdefaultでsysdateなどとできないようです。その代わりとしては、timestamp型を使うとINSERTやUPDATE時に自動的に更新されるようです。
post_dateにtimestamp型を指定するとよさそうですね。ただし、1つのテーブルにtimestamp型が2つ以上ある場合は自動更新されるのは
最初の1つだけが自動更新されます。