SQLを勉強しようと思ったときテーブルが無いとそもそも始まりません。
このテーブルを作成するCREATE文は使う頻度も少なく、ちょっとややこしいです。
もし初心者の方はサンプルのコードだけ使ってまずテーブルを作成してみてください。
作成するテーブルとCREATE文のサンプル
さて、今回作成してみるテーブルとそのテーブルを定義するCREATE文は以下の通りです。
いったんテーブルを作成した後でも変更は出来ますので、まずは基本的な出来るだけシンプルにしたものをサンプルにします。
データは次のブログで登録します。
今回はテーブルの定義だけです。
ユーザーテーブル(user)
ID | ユーザー名前 |
---|---|
1 | 田中 |
2 | 鈴木 |
3 | 山田 |
1 2 3 4 |
CREATE TABLE user ( id int(11) NOT NULL PRIMARY KEY, user_name text NOT NULL ); |
商品テーブル(product)
ID | 商品名 |
---|---|
1 | りんご |
2 | みかん |
3 | マンゴー |
1 2 3 4 |
CREATE TABLE product ( id int(11) NOT NULL PRIMARY KEY, product_name text NOT NULL ); |
購入履歴テーブル(history)
ID | ユーザーID | 商品ID |
---|---|---|
1 | 3 | 1 |
2 | 3 | 3 |
3 | 1 | 2 |
1 2 3 4 5 |
CREATE TABLE history ( id int(11) NOT NULL PRIMARY KEY, user_id int(11) NOT NULL, product_id int(11) NOT NULL ); |
CREATE文の解説
CREATE文を使ってテーブルを定義するためには以下のような型になります。
CREATE TABLE テーブル名 (
カラム名 型(桁数) NOT NULL PRIMARY KEY,
カラム名 型 NOT NULL
);
1行目は CREATE TABLE は、これから「テーブルを作成します。」という意味です。
その後に作成するテーブルの名前を書き ( ); をつけます。
2行目、3行目はカラムを定義します。
カラムとは、データの列のことをさします。
「縦の行が~」と言う言い方をする人がいますが、これはプログラマーには???です(笑)
行またはローは横向きを指して、列またはカラムは縦向きを指します。
日本語的に「縦の行が~」が正しいかは分かりません。
少し脱線しましたが、カラムを定義するというのはつまりその列に何に関する情報が入るかを定義するということです。
例えば、historyテーブルの場合は「ID」「ユーザーID」「商品ID」があります。
見て分かる通りですが、「ID」は履歴データを管理するための番号です。
「ユーザーID」は購入した人のIDで、「商品IDは」購入した商品のIDです。
カラムを定義するときには、カラム名の後に 型(桁数) を定義します。
これはどんな情報が何桁入るかということです。
int(11) は数値が最大11桁ということになり、text はなんでも入ります。
textの場合は桁数の制限が無いので桁数は定義しません。
型の種類については後ほど説明します。
先ほど「ID」は履歴データを管理するための番号と説明しました。
このようなただのデータではなく、データを識別するためのキーになるカラムをプライマリーキーと言い、テーブル定義の際にカラムの後ろに PRIMARY KEY と書くことでプライマリーキーになります。
詳細は後ほど説明します。
それともう一つ、「NOT NULL」とは、「NULLの状態はダメですよ」という意味です。
NULLとは何も値が入っていない状態のことを指します。
他にも定義できるものはたくさんあるのですが、最低限覚えておかなければいけないものだけ記載しました。
データの型
データの型もたくさんありますが、よく使うものだけ把握してれば大丈夫です。
それ以外が必要になったらいい型ないかなーでいいです。
数値型
INT
最も一般的な整数の型です。
-2147483648~+2147483647 の範囲内ならばこちらを使えば充分です。
BIGINT
INTより大きい数値を扱う場合はこちらを使います。
-9223372036854775808~+9223372036854775807
TINYINT
-128~+127 0~+255
SMALLINT
-32768~+32767 0~+65535
MEDIUMINT
-8388608~+8388607
FLOAT
小数を扱う場合はFLOATかDOUBLEを使います。
範囲は、
-3.402823466E+38 から -1.175494351E-38
0
1.175494351E-38 から 3.402823466E+38
です。なんだかややこしいですね。
金融系のシステムを作ったときは使いましたけど、昔すぎて忘れちゃいました。
DOUBLE
-1.7976931348623157E+308 ~ -2.2250738585072014E-308
0
2.2250738585072014E-308 ~ 1.7976931348623157E+308
テキスト型
TEXT
桁数の決まっていない文字列や長い文章を扱う場合はこれを使います。
僕の場合は文字列は基本これです(笑)
だけど、TEXTの場合はプライマリーキーに設定したり出来ないので注意です。
VARCHAR
文字列の長さが決まっている場合はこちらを使います。
例えば住所の都道府県やハイフン付きの電話番号などを管理する場合です。
似たものに CHAR がありますが、確か違いは・・・CHARの場合データベースに格納したときに指定した桁数だけ確保するのに対し、VARCHARだったら入力値の分だけ確保してくれます。
例えばステータスを2桁で管理する場合は必ず2桁入力されるので CHAR でいいですが、名前の場合は人によって桁が違います。その場合は VARCHAR がいいです。
でも、最初はある程度桁数が決まっている場合は全部 VARCHAR を使っておけば問題ないです。
BLOB
あと文字列を扱う型でBLOBというものもあります。
用途はTEXTとほぼ同じですが、BLOBの場合は入力した値をバイナリに変換して保管します。
僕はあまり使いませんが、画像データなどをデータベースに格納する場合に使っていたような気がします。
日付型
DATETIME、TIMESTAMP
日付を秒まで保存する場合に使う型です。
形式は以下のようになります。
YYYY-MM-DD HH:MM:SS
何故同じものが2つもあるのかは分かりません。
DATETIMEを使っておけば問題ないでしょう。
DATE
YYYY-MM-DD 形式で日付を保存する場合に使います。
でも日付だけ登録するより、時間も保存しておいたほうが何かと便利です。
そうとうデータ量が多く少しでも削りたい場合や時分秒が絶対に必要ない場合はいいですが、そうで無いならDATETIMEにしておいたほうが無難です。
もしDATE型を使うのならば TIME も同時に使ったほうがいいでしょう。
TIME
HH:MM:SS 形式で時分秒を保存します。
時は24時まででなく838時までいけます。
タイマーとして使うのも便利です。
プライマリーキーとは
プライマリーキーとは、データの1行1行を管理するためのカラムのことです。
INTでなくVARCHARでもよいです。
1行1行を管理するため必ずユニーク(一意)になる必要があります。
同じテーブル内の他のデータと被ってはいけないってことです。
それプラス、インデックスとしての機能もあります。
簡単に説明すると、検索するときに早くなるんです。
プライマリーキーは1つのテーブルに1つじゃなくてもよく、2つ指定した場合にはその2つを合わせてユニークになる必要があります。
phpMyAdminからも作成できる
実はテーブルの作成は今時SQLで行ったりしません。
MySQLならphpMyAdminがあり、そこからテーブルの作成やカラムの追加など出来てしまいます。
サイドメニューのテーブルを作成したいデータベースの下に new とあるのでそれをクリックすると下のような画面が出ます。
テーブル名、カラムを指定して「保存する」をクリックすると作成出来ます。簡単ですね。
カラムに関しては入力するものがたくさんありますが、赤枠で囲った部分とプライマリーキーくらいを指定すればOKです。
もちろん他に指定するものがあれば指定してください。
「じゃなんでCREATE文を説明したん??」と思うでしょう。
それは、便利なツールがあるけど、やはり基本的な部分は抑えておいたほうが理解が出来るからです。
この画面に関しても最初は入力項目に入力してテーブル作成でいいですが、ここに入力するとどんなSQLが発行されてテーブルが作成されるのかイメージしてください。
さくらやXサーバーなどのレンタルサーバーには phpMyAdmin がありますが、もしかしたら無いサーバーもあるかもしれませんし、MySQL以外のデータベースには無いかもしれません。
覚えておいて損は無いです。
phpMyAdminからCREATE文を生成
とか言いながらphpMyAdminでテーブルを作成するCREATE文のSQLも確認できます(笑)
勉強をする場合には自動で生成されたSQLコードを見るのも勉強です!笑
さきほどのテーブルを作成する画面の右下に「SQLプレビュー」というボタンがあります。
これを押すだけです!
すると下のような小窓が出てきてSQLが書かれています。
整形されていない1行のSQLですが、自分が見やすいように改行を入れるだけでも勉強になります。
まとめ
CREATE文はテーブルを作成するためのSQL。
テーブルは基本的に行がデータとして追加されていく。
どんなデータを保存するかはカラムを作成するときに指定する。
カラムにはデータの型があり、目的に合わせて指定する。
phpMyAdminからテーブルを作成することが出来るが、その場合はSQLコードを確認し勉強も同時にする。
コメントを残す