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)