クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

データベースの表と主キーとは

このレッスンのあとで: 主キーを持つテーブルを設計できる。

50分のレッスンコマンド9件MySQL と phpMyAdmin のラボ:ショップのデータベースで SQL を練習する

同じ番号が2人に付いたら

データベースの表(テーブル)は、同じ種類のデータを、行と列で入れておく入れ物です。そして主キーという列を決めておくと、同じ行が2つできるのを防げます。

ある店で、2人の会員に同じ会員番号が付き、ポイントが別の人に入ってしまいました。データベースなら、2つ目の同じ番号は入れる時点で断ります。

このレッスンのゴール

メモ

主キーを持つテーブルを設計できる。

キーワード

ことばいみれい
テーブル1種類のものを、行と列で入れておく表
行(レコード)表の中の1件分のデータ
列(フィールド)表の中の、同じ種類の値が縦に並ぶ部分price
データ型列に入れてよい値の種類INT
主キー行を1つずつ区別する列。同じ値は2度使えないid
外部キー別の表の行を指す列club_id

学生が入力するセルは、このプレビューでは空白です。

テーブルには何が入るのか

リレーショナルデータベースは、データをテーブルに入れます。1つのテーブルには、1種類のものだけを入れます。生徒、商品、注文などです。

1行が1件、1列が1つの項目です。次の表は、文化祭の模擬店を並べたもので、1行が1つの店を表します。

試す: 模擬店の表を読む

コード: sql
-- 模擬店の表を、全部の列で読みます。
SELECT * FROM stalls;
-- 次に、id が 3 の行だけを読む形に変えてみましょう。

データ型で入る値が決まる

列にはそれぞれデータ型があります。数字の列に文字を入れようとすると、データベースは断ります。

型を選ぶときは、その値で何をするかを考えます。足し算をするなら数の型、日にちの計算をするなら日付の型です。

例: データ型の選び方

入れる事実型理由
在庫の個数INT整数だけでよい
円の値段INT1円未満はないので整数でよい
ドルの値段DECIMAL(8,2)セントまで正確に持てる
店の名前VARCHAR(40)40文字までの文字列
出荷した日DATE日数の計算を任せられる
販売終了かBOOLEANはいかいいえだけ

学生が入力するセルは、このプレビューでは空白です。

始める前に

メモ

上のバーの Start the lab を押し、マシンが動き出すまで待ってください。Run ボタンは、順番にコマンドを自分専用のターミナルに入力します。

証明書を受け入れる設定

コマンド
printf '[client]\nssl-verify-server-cert=0\n' > ~/.my.cnf

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

ショップ用の短い名前

コマンド
alias sql='mariadb -h db -u student -pstudent shop -t -e'

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

主キーは行の名札

主キーは、行ごとに値が違う列です。空(NULL)にはできません。

多くの場合、データベースが数えてくれる番号を使います。AUTO_INCREMENT です。同じ番号の2行目は断られます。

2つの列を組み合わせて、1つのキーにすることもあります。その場合は、組み合わせが重ならないようにします。

2つの列でできたキー

コマンド
sql "DESCRIBE order_items"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

よくある間違い

注意

名前やメールアドレスを主キーにしがちです。名前は重なりますし、メールアドレスは変わります。データベースが数える番号を主キーにし、メールアドレスは UNIQUE の列として別に持ちます。

外部キーは別の表を指す

部活の名簿を考えます。部員の表に、部活の名前や部屋を何度も書き写すことはしません。部活の番号だけを入れます。

この列が外部キーです。その番号が部活の表にあるかを、データベースが毎回調べます。だから、存在しない部活の部員は入れられません。

自分のデータベースを作る

コマンド
sql "CREATE DATABASE IF NOT EXISTS student_club"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

そのための短い名前

コマンド
alias club='mariadb -h db -u student -pstudent student_club -t -e'

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

clubs 表を作る

コマンド
club "DROP TABLE IF EXISTS members, clubs; CREATE TABLE clubs (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(40) NOT NULL UNIQUE, room VARCHAR(20) NOT NULL)"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

members 表を作る

コマンド
club "CREATE TABLE members (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(40) NOT NULL, club_id INT NOT NULL, FOREIGN KEY (club_id) REFERENCES clubs(id))"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

部活を2つ入れる

コマンド
club "INSERT INTO clubs (name, room) VALUES ('サッカー部', 'グラウンド'), ('美術部', '美術室')"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

部活9の部員を入れる

コマンド
club "INSERT INTO members (name, club_id) VALUES ('田中', 9)"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

このラボとソースについて: MySQL と phpMyAdmin のラボ:ショップのデータベースで SQL を練習する

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。