※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

MySQLでテーブルを作成する流れを説明していきます。5月31日記事

目次




とりあえずテーブル作成

最初は新着情報を管理するテーブルを作っていきます。

設計

そんなに新着時間を表示させるほどの情報はないので、日付のみにするとします。すると、記事ID、日付(時間なし)、タイトル、内容属性、本文、URL、ステータスというところでしょうか。ステータスは、投稿状態を表すもので公開(2)、下書き(1)、削除(0)といったものを格納していきます。

ログイン

ログインします。

mysql -u ユーザ名 -pユーザパスワード

これでログインします。

ログイン後
use データベース名;

と入力します。

テーブル作成

informationというテーブルを作っていきます。

CREATE TABLE information(
id INT NOT NULL AUTO_INCREMENT,
info_date DATE NOT NULL default '0000-00-00',
title VARCHAR(255) NOT NULL default '',
type TINYINT(1) NOT NULL default '0',
info_text TEXT NOT NULL default '',
url VARCHAR(255) NOT NULL default '',
status TINYINT(1) NOT NULL default '0',
PRIMARY KEY (`id`), 
INDEX `info_date` (`info_date`),
INDEX `status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=0;

※削除は mysql> DROP TABLE information; です。

主キーは記事IDです。INDEXは公開日付、ステータスに張っていきます。データベースで検索するときに、最新5件の記事+ステータスが2の状態の記事を検索するクエリを投げれば5件のデータを取得できるようにしておきます。ステータスのINDEXはこれ以外にも現在の更新情報数を数えるためにも必要なものです。

テーブル作成のコマンドラインの意味

ストレージエンジンの種類

MySQLにはテーブルの種類の違いがあります。俗にストレージエンジンと呼ばれ、InnoDBとMyISAMというものが有名です。前まではMyISAMがよく使われていましたが、ここ最近InnoDBを使っていこうという風潮があります。MySQLのバージョン5.5以降では、InnoDBがデフォルトになっています。特に指定がない限り、何も記述しないかInnoDBを指定するようにしましょう。データベースは、テーブルのデータを更新、変更した際に、他のテーブルも同時に更新することを求められる場合があります。その際に、何らかのトラブルがあった時に、処理を一度取り消し、再び行うことが求められます。InnoDBがそれができるのです。

MyISAM InnoDB
概要 テーブルに対してロック レコードに対してロック
長所 マシンへの負担が少ない 異なるレコードの場合同時に処理できる。処理が早い
短所 異なるレコードの処理を同時にできない。 昔は全文検索ができなかった。
利用 数少ない更新であれば有利 様々なユーザが使う場合に有利



主キーとINDEX

データベースはデータとなる情報(レコード)が増えてこれば検索や管理が大変になります。データベースはExcelのように 何もせずに データを早く検索できたりソートかけれるものではありません。データベースは、主キーやINDEXを 自らつけて 処理を早くしていく設計をしていかなければなりません。

違いについては主キーは値が一つしかつかないもの。インデックスは検索を早くするものです。 http://www.nishi2002.com/4002.htmlには

主キー --- 行を識別するもの(口座番号、生徒番号、社員番号などの役割)

インデックス --- 検索を速くするもの(書籍の巻末にある索引の役割)

と書かれています。もちろん主キーも検索するときに利用されたりしますしインデックスがつけられています。
また、主キーにはPrimaryKeyというものがつけられ、重複する値は格納されないという性質を持ちます。最初にテーブルのデータが入る行(レコード)に一つずつつけられていきます。 イメージとしては本のページ数です。

一方、インデックスとは、本の索引のような機能です。本はページ数だけで成り立ちますが、より早く本の情報を検索するためには巻頭や巻末に索引機能を設け検索を高速にしています。

そして、これらを列(カラム)にどうつけていくかは設計者やテーブル作成者が決めていかなければなりません。
一見、全部にINDEXつければいいのに。と思う人もいるかもしれませんが、情報量が無駄に多くなったりします。やはり 自分の意図した検索だけをさせ処理や検索を高速化させる構想を頭の中で考えながらテーブル設計していくことが求められます。

データ型

データベースのフィールドに入れられる文字または数字には文字数やバイト数や文字数の上限と下限が決められています。どんな値でも入れられるとは限りません。ここでは、その型の種類と上限や下限についてまとめていきたいと思います。

数値の型については以下の通りです。数値はどのような数値でも格納できるわけではありません。入れられる数値には範囲があります。わからなければ 最初はINT型だけ 覚えておけばいいと思います。

最小値 最大値 サイズ
TINYINT -128 127 1バイト
TINYINT UNSIGNED 0 255 1バイト
SMALLINT -32768 32767 2バイト
SMALLINT UNSIGNED 0 65535 2バイト
MEDIUMINT -8388608 8388607 3バイト
MEDIUMINT UNSIGNED 0 16777215 3バイト
INT -2147483648 2147483647 4バイト
INT UNSIGNED 0 4294967295 4バイト
BIGINT -9223372036854775808 9223372036854775807 8バイト
BIGINT UNSIGNED 0 18446744073709551615 8バイト
FLOAT -3.402823466E+38 3.402823466E+38 4バイト
FLOAT UNSIGNED 0 3.402823466E+38 4バイト
DOUBLE -1.7976931348623157E+308 1.7976931348623157E+308 8バイト
DOUBLE UNSIGNED 0 1.7976931348623157E+308 8バイト



文字データ型

説明 カッコ内 バイト数 特徴
VARCHAR 可変長文字列 最大バイト数を指定 0~65535バイト 最大バイト数は決まるが小さい場合は変化
CHAR 固定長文字列 文字数を指定 0~255文字 常に文字数固定。処理が早くなり軽い
TEXT 可変長文字列 65,535バイト 文章等がよく挿入される
MEDIUMTEXT 可変長文字列 16,777,215バイト



日付型

日付形式 有効範囲 バイト数
DATE YYYY-MM-DD '1000-01-01' ~ '9999-12-31' 3バイト
DATETIME YYYY-MM-DD HH:MM:SS '1000-01-01 00:00:00' ~ '9999-12-31 23:59:59' 8バイト
TIMESTAMP 'YYYY-MM-DD HH:MM:SS' '1970-01-01 00:00:00' ~ '2037-12-31 23:59:59' 4バイト
TIME HH:MM:SS '-838:59:59' ~ '838:59:59' 3バイト



次回はテーブル作成後の意味や操作についてMySQLでテーブル作成2を書いていきたいと思います。