ここでは、初心者から実践的に学べるプログラミングスクール「ウェブカツ!!」のPHP・MySQL部入門またはWEBサービス部を受講している生徒の方向けにさらに「SQL」についての理解度を上げるため特訓をしていきます。
ここからは、WEBサービス部から初めて出てくる内容を元に特訓をするので、まだWEBサービス部を1周見ていない人は見てからにしてください。
出題の回答は全て「SQL言語」を使って答えてください。
DBソフトの種類によってSQL言語は微妙に違いますが(と言っても基本の書き方はどれも同じなのでどのDBでも使える知識です)、ここでは「MySQL」を元にしたSQLの書き方を特訓していきます。
必ず実際にMySQLを動かしてphpMyAdminから問題のテーブルを作成してSQLを実行(「SQL」というタブから行えます)しましょう。(じゃないと練習にならないので)
鬼練12:テーブルつくんのめんどくない?
毎回、毎回、テーブル作らせやがって。
そうは思いませんか?
そう思ってもらいたいんです。
だって、
管理画面からわざわざ作る必要ないんだもん。
仕様書
下記要件に従ってSQLを記述してください。
下記の構造のテーブル「users」をphpMyAdminから「SQL文」を使って作成してください。
ヒント
テーブルを今まで新たに作るにはphpMyAdminから手で一個一個カラムや項目を入力して作りましたね。
初心者には最初はそれが分かりやすいんですが、大抵の現場じゃそんな事やりません。
phpMyAdminで操作しているほとんどは、内部で「SQL文」を生成してただ実行してるだけなんです。
phpMyAdminさんがあなたの操作を元にSQL文ちゃんと作ってくれてるってことですね。
なので、今回は「テーブルを新規作成する」という操作もちゃんとSQL文で書いてみましょう。
もちろん、sql文を書き慣れてないとGUI(管理画面から)で操作する方が楽に感じるんですが、それだと複数人で開発する際などに困った事が起こります。
複数人でローカル環境で開発をする場合、当たり前ですがそれぞれのローカル環境にDBを用意して、皆同じテーブルを作る必要がありますね?
10人いたら、10人それぞれ作らなきゃいけないわけです。
しかも、テーブルは一回作って終わりなことはほとんどないですよね。
サービスが絶えず成長するにつれてテーブルも増えたり、カラムも増減したり、構造が変わりますから。
その度に
「○○テーブルの○○カラムを削除し、○○カラムの名前を変更し、○○カラムをNOT NULLからNULL値でも大丈夫なように変更してください。
操作方法は、カラムの○○項目を〜〜〜」
と周知させるんでしょうか?
めんどっ。
めんどいっすよね、それ。
まぁ、エンジニアなら操作方法まで説明せずとも「このカラムNULL許容する形(カラムを空のままINSERT出来るってこと)に変更になったから〜」で分かりますけどね。
それよりも、まずその現場のリーダーなり誰かがまずその変更や新規作成のSQL文を書いて
「このSQLを各自流しといてください(実行してくださいって意味)」
って方が楽ですよね。
しかも、GUIで操作する場合のデメリットは
操作の内容が記録されない
ってことです。
あとあとで「どこをどう変えたんだっけ?」というのが分からなくなります。
当の本人が記憶しておくしかないわけですね。
人間って忘れる生き物なのに?
(ここらへんの話はLaravel部やRubyonRails部でやってるのでみてみてください)
それよりかは、「SQL文」という形で残しておけばあとあとで何が変更されたか、作られたのかが分かりますね。
そのSQL文を保存しとけば、今回の鬼練のように新たにまたテーブルを1から作り直すときにSQLを一発流すだけで完成です。効率いいですよね。
では、今回のそのテーブルを新規作成するSQL文は?というと
「CREATE文」
というものを使います。
CREATE文はDB内の色々なものを作る時に使うものなので、その中でも
「CREATE TABLE文」
を使えばいいんです。
あとはググってみましょうね。
答え
では、それぞれのテーブルのSQL文の答えです。
1 2 3 4 5 6 |
CREATE TABLE users( id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, name VARCHAR(255) NOT NULL, email VARCHAR(255) UNIQUE NOT NULL, gender BOOLEAN DEFAULT 0 ) ENGINE=INNODB DEFAULT CHARSET=utf8; |
わかってると思いますが、改行してみやすくしてるだけで、改行はしてもしなくてもいいです。
このSQL文をphpMyAdminのSQLタブから流してやるだけですね。
書き方ですが、
1 2 3 |
CREATE TABLE users( カラム名 データ型 制約やデフォルト値などオプション ) ENGINE=エンジン名 DEFAULT CHARSET=DB内で扱う文字コード; |
という書き方になります。
カラムが複数あるなら「,(カンマ)」でどんどん繋げてあげるだけですね。
最後の
1 |
ENGINE=INNODB DEFAULT CHARSET=utf8; |
に関しては、もうおまじないだと思ってください。
今は「INNODB」という内部のエンジンを使う事以外まずないですし、文字コードもUTF-8が当たり前なので。
idカラムの場合
1 |
id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, |
という形でオプションを色々つけてますね。
オプションの順番は決まってないのでどの順番でも大丈夫です。(確か、いくつかは順番決まってたようなきがするけど忘れた)
オプションも大文字でも小文字でもいいですが、みやすいように大文字で書いているだけです。
オプションの名前は決まっているので、決まった名前でつけてやる必要があります。
INT型はVARCHAR型と違って、カッコをつけて「(11)」というように数字を指定しなくても勝手に「int(11)」でテーブルが作られます。
これで、今後テーブルを毎回作る面倒さから解放されましたね。
え、やっぱ管理画面でポチポチした方が楽だって?
そりゃそうだ。慣れてないだけだもの。