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つだけが自動更新されます。