MySQLを学習(2):DataBaseとTableの作成
July 16, 2008 – 10:11 pm前回、「還暦から始める動的Webサイト構築:MySQLを学習(1)」で、リレーショナルデータベース、そしてSQLを概観した。ここで述べたように、データベースの構築作業には、SQLコマンドを操るスキルの獲得が重要だ。スキル獲得のためには習うより慣れろ。我が家の蔵書データベースを試作し、必要なSQL構文を、逐次、学習することにした。
蔵書データベース: 我が家には、二~三千冊程度の本がある。ほとんど未整理の状態だ。本のタイトル、著者名などを入力すると、本の位置が分かる程度の機能を持った「蔵書データベース」があれば便利に違いない。ということで、本の「タイトル」、「著者名」、「出版社」、「出版日」、そしてこの本が置かれている「本棚の位置」をカラムとするテーブルを含む「蔵書データベース」を試作してみることにした。とりあえず、データベースに1つのテーブルだけの例を対象に、MySQLの操作法を学ぶことにしたわけだ。
作業手順としては、まずMySQLのインストール、設定の後、DataBase、それに引き続きTableを作成、そしてデータベースに登録する書籍の内容を表すデータを入力するということになる。
MySQLのインストールと設定: MySQLは、CentOS5に含まれており、これはインストール済みだ。このブログを作成しているWordPress自体がMySQLをベースとして作成されている。ということで、MySQLは当然のことながら、我がサーバ上で動作可能になっている。
ただ、インストール時のキャラクターセットは、ISO-8859-1 Latin1となっている。日本語文字を使用することを考えると、キャラクターセットとしてUTF8を統一して使用することが望ましい(我がシステムでは、UTF8を標準のキャラクターセットとして使用している)。データベースのキャラクターセットをUTF8にするためには、以下のように、MySQLのコンフィギュレーションファイル/etc/my.cnfのmysqldに –default-character-setオプションを加えてやれば良い;
/etc/my.cnf [mysqld] default-character-set=utf8 skip-character-set-client-handshake
この設定により、新たに作成しようとするDataBaseのキャラクターセットはutf8となる。
DataBaseの作成: まず、「蔵書データベース」用の空のDataBase(BookDBと名づける)を作成する。実際のデータベース作成作業にあたっては、MySQL管理用ツールphpMyAdminを用いていることもできるが、コマンドベースでDataBaseの作成する場合には、以下のようになる(但し、ユーザtestuserのMySQLサーバへのアクセスがパスワードtestpassとしている)。
#mysql -u testuser -ptestpass (testuserユーザでMySQLサーバへログイン) mysql> create database BookDB; (database BookDBを作成) Query OK, 1 row affected (0.05 sec) mysql> show databases; (データベース BookDB の作成を確認) +--------------------+ | Database | +--------------------+ | BookDB | | mysql | +--------------------+ 2 rows in set (0.00 sec)
BookDBが作成されていることが分かる。これとは別に、mysqlと名づけられたデータベースが存在する。これは、システム管理用のデータベースである。
<関連するSQL構文は以下の通り>
CREATE DATABASE構文
CREATE DATABASE [IF NOT EXISTS] db_name
指定した名前db_nameのデータベースが作成される。
Tableの作成: 作成した空のデータベース上に、「Book-ID」、「タイトル」、「著者名」、「出版社」、「出版日」、「本棚の位置」をカラムとするTableを定義する。ここで、カラム名を夫々、book_id, title, author, publisher, pub_date, positionとし、CREATE TABLE文を用いて、Tableを作成する;
mysql> CREATE TABLE IF NOT EXISTS book_table ( book_id int(5) NOT NULL AUTO_INCREMENT PRIMARY KEY, title varchar(240) NOT NULL, author varchar(240) NOT NULL, publisher varchar(10) NOT NULL, pub_date date NOT NULL, position varchar(10) NOT NULL ); Query OK, 0 rows affected (0.00sec)
Tableの作成は上記のmysqlコマンドを用いる方法に加えて、これまでの手順を一括して行うことも可能である。まず、以下の内容を持つ、book_table.sqlなるファイルを作成:
-- -- Table structure for table `book_table` -- DROP TABLE IF EXISTS `book_table`; CREATE TABLE `book_table` ( `book_id` int(5) NOT NULL AUTO_INCREMENT PRIMARY KEY, `title` varchar(240) NOT NULL, `author` varchar(240) NOT NULL, `pub_date` date NOT NULL, `publisher` varchar(10) NOT NULL, `position` varchar(10) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
以下のコマンドにより、データベースBookTableへの接続、そしてテーブルbook_tableの作成が一括して行うことができる。
# mysql –u username –p BookDB < book_table.sql Enter password:*******
<関連するSQL構文は以下の通り>
CREATE TABLE構文
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)] [table_options] [select_statement]
指定した名前 tbl_name のテーブルが作成される。デフォルトでは、テーブルはカレントデータベースに作成される。テーブルがすでに存在する場合、カレントデータベースがない場合、またはデータベースが存在しない場合には、エラーが発生する。
create_definition: col_name type [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT] [[PRIMARY] KEY] [COMMENT 'string'] [reference_definition] | [CONSTRAINT [symbol]] PRIMARY KEY (index_col_name,...) | KEY [index_name] (index_col_name,...) | INDEX [index_name] (index_col_name,...) | [CONSTRAINT [symbol]] UNIQUE [INDEX] [index_name] (index_col_name,...) | FULLTEXT [INDEX] [index_name] (index_col_name,...) | [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name,...) [reference_definition] | CHECK (expr) type: TINYINT[(length)] [UNSIGNED] [ZEROFILL] | SMALLINT[(length)] [UNSIGNED] [ZEROFILL] | MEDIUMINT[(length)] [UNSIGNED] [ZEROFILL] | INT[(length)] [UNSIGNED] [ZEROFILL] | INTEGER[(length)] [UNSIGNED] [ZEROFILL] | BIGINT[(length)] [UNSIGNED] [ZEROFILL] | REAL[(length,decimals)] [UNSIGNED] [ZEROFILL] | DOUBLE[(length,decimals)] [UNSIGNED] [ZEROFILL] | FLOAT[(length,decimals)] [UNSIGNED] [ZEROFILL] | DECIMAL(length,decimals) [UNSIGNED] [ZEROFILL] | NUMERIC(length,decimals) [UNSIGNED] [ZEROFILL] | CHAR(length) [BINARY | ASCII | UNICODE] | VARCHAR(length) [BINARY] | DATE | TIME | TIMESTAMP | DATETIME | TINYBLOB | BLOB | MEDIUMBLOB | LONGBLOB | TINYTEXT | TEXT | MEDIUMTEXT | LONGTEXT | ENUM(value1,value2,value3,...) | SET(value1,value2,value3,...) table_options: (省 略) select_statement: (省 略)
作成したTableの確認: 作成したテーブルの内容は、DESCRIBE文により確認することができる。
mysql> describe book_table; +-----------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------+--------------+------+-----+---------+----------------+ | book_id | int(5) | NO | PRI | NULL | auto_increment | | title | varchar(240) | NO | | NULL | | | author | varchar(240) | NO | | NULL | | | pub_date | date | NO | | NULL | | | publisher | varchar(10) | NO | | NULL | | | position | varchar(10) | NO | | NULL | | +-----------+--------------+------+-----+---------+----------------+ 6 rows in set (0.00 sec)
参考サイト:
http://dev.mysql.com/doc/refman/4.1/ja/create-table.html
http://www.atmarkit.co.jp/flinux/rensai/mysql5_01/mysql5_01a.html
http://wota.jp/ac/?date=20061011
3 Trackback(s)