ここでは、初心者から実践的に学べるプログラミングスクール「ウェブカツ!!」のPHP・MySQL部入門またはWEBサービス部を受講している生徒の方向けにさらに「SQL」についての理解度を上げるため特訓をしていきます。
ここからは、WEBサービス部から初めて出てくる内容を元に特訓をするので、まだWEBサービス部を1周見ていない人は見てからにしてください。
出題の回答は全て「SQL言語」を使って答えてください。
DBソフトの種類によってSQL言語は微妙に違いますが(と言っても基本の書き方はどれも同じなのでどのDBでも使える知識です)、ここでは「MySQL」を元にしたSQLの書き方を特訓していきます。
必ず実際にMySQLを動かしてphpMyAdminから問題のテーブルを作成してSQLを実行(「SQL」というタブから行えます)しましょう。(じゃないと練習にならないので)
鬼練13:テーブルつくんのめんどくない?リレーションだってめんどくない?
今度はproductsテーブル作りましょう。
仕様書
下記要件に従ってSQLを記述してください。
下記の構造のテーブル「products」をphpMyAdminから「SQL文」を使って作成してください。
ヒント
外部キー制約ってどうつけるのか?ですよね。
ちなみにこれ、usersテーブルが先に出来てないと作れないのでご注意を。
(だって、紐づける先のテーブルのカラムを指定しなきゃいけないでしょ?ないテーブルのものを指定できないよね?)
「CREATE TABLE 外部キー制約」
でググってみましょう。
答え
では、テーブルを新規作成しつつ、外部キー制約をつけるためのSQL文の答えです。
1 2 3 4 5 6 7 8 9 10 |
CREATE TABLE products( id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, user_id INT NOT NULL, name VARCHAR(255) NOT NULL, detail TEXT NOT NULL, CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE RESTRICT ON UPDATE RESTRICT ) ENGINE=INNODB DEFAULT CHARSET=utf8; |
肝心なのは、この部分ですね。
1 2 3 4 5 |
CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE RESTRICT ON UPDATE RESTRICT |
ここらへん、外部キー制約をつける時に設定しましたよね。
1 2 3 4 5 |
CONSTRAINT 外部キー制約につける名前(適当なのでいいが、fk_外部キーをつけるカラム名にすることが多い) FOREIGN KEY (外部キーをつけるカラム名) REFERENCES 外部キーと紐づける先のテーブル名 (外部キーと紐づける先のカラム名) ON DELETE 削除処理した場合の挙動 ON UPDATE 削除処理した場合の挙動 |
です。