「MySQLでテーブル作成1」の編集履歴(バックアップ)一覧に戻る

MySQLでテーブル作成1 - (2015/05/31 (日) 21:41:41) のソース

MySQLでテーブルを作成する流れを説明していきます。
~
~
目次
#contents

~
~
----
*とりあえずテーブル作成
最初は更新情報を管理するテーブルを作っていきます。~
**設計
そんなに新着時間を表示させるほどの情報はないので、日付のみにするとします。すると、記事ID、日付(時間なし)、タイトル、内容属性、本文、URL、ステータスというところでしょうか。ステータスは、投稿状態を表すもので公開(2)、下書き(1)、削除(0)といったものを格納していきます。
~
~
主キーは記事IDです。INDEXは公開日付、ステータスに張っていきます。データベースで検索するときに、最新5件の記事+ステータスが2の状態の記事を検索するクエリを投げれば5件のデータを取得できるようにしておきます。ステータスのINDEXはこれ以外にも現在の更新情報数を数えるためにも必要なものです。


*テーブル作成のコマンドラインの意味
**ストレージエンジンの種類
MySQLにはテーブルの種類の違いがあります。俗にストレージエンジンと呼ばれ、InnoDBとMyISAMというものが有名です。前まではMyISAMがよく使われていましたが、ここ最近InnoDBを使っていこうという風潮があります。MySQLのバージョン5.5以降では、InnoDBがデフォルトになっています。特に指定がない限り、何も記述しないかInnoDBを指定するようにしましょう。データベースは、テーブルのデータを更新、変更した際に、他のテーブルも同時に更新することを求められる場合があります。その際に、何らかのトラブルがあった時に、処理を一度取り消し、再び行うことが求められます。InnoDBがそれができるのです。
~
~
||BGCOLOR(#CCF):COLOR(#000):CENTER:MyISAM|BGCOLOR(#CCF):COLOR(#000):CENTER:InnoDB|h
|概要|テーブルに対してロック|レコードに対してロック|
|長所|マシンへの負担が少ない|異なるレコードの場合同時に処理できる。処理が早い|
|短所|異なるレコードの処理を同時にできない。|昔は全文検索ができなかった。|
|利用|数少ない更新であれば有利|様々なユーザが使う場合に有利|
~
~
**主キーとINDEX
データベースはデータとなる情報(レコード)が増えてこれば検索や管理が大変になります。データベースはExcelのように&color(red){何もせずに}データを早く検索できたりソートかけれるものではありません。データベースは、主キーやINDEXを&color(red){自らつけて}処理を早くしていく設計をしていかなければなりません。
~
~
違いについては主キーは値が一つしかつかないもの。インデックスは検索を早くするものです。
http://www.nishi2002.com/4002.htmlには
>主キー --- 行を識別するもの(口座番号、生徒番号、社員番号などの役割)
>インデックス --- 検索を速くするもの(書籍の巻末にある索引の役割)

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

~一方、インデックスとは、本の索引のような機能です。本はページ数だけで成り立ちますが、より早く本の情報を検索するためには巻頭や巻末に索引機能を設け検索を高速にしています。
~
~
&color(red){そして、これらを列(カラム)にどうつけていくかは設計者やテーブル作成者が決めていかなければなりません。}
~
一見、全部にINDEXつければいいのに。と思う人もいるかもしれませんが、情報量が無駄に多くなったりします。やはり&color(red){自分の意図した検索だけをさせ処理や検索を高速化させる構想を頭の中で考えながらテーブル設計していくことが求められます。}
~
~
**データ型
数値の型については以下の通りです。数値はどのような数値でも格納できるわけではありません。入れられる数値には範囲があります。わからなければ&color(red){最初は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バイト|画像等のデータも挿入される|
~
~
日付型
|型	|日付形式	|有効範囲	|バイト数|h
|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バイト|