Database環境の構築

メモ:  Category:php

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

bluenote by BBB