忍者ブログ

からすまる日誌 mySQL

授業ノートのまとめ

序章(6) 外部キーと主キー

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

序章(6) 外部キーと主キー

別表化する
 
いま麺類麺類和食和食・・・みたいになっている
のちのちカテゴリを変えたいかもしれない
 
いわゆる変数のように「設定は1か所」にしておきたい。というか紐づけ。
 
麺類 1
洋食 2
和食 3 
お菓子 4
栄養補助食品 5
  

これでいいのかな?
UPDATE foods SET cat=5 WHERE cat="栄養補助食品";
 
いいややってみよう
出来た
 
同じようにすべてのカテゴリを数字化する
 

catの型をintにする
 
構造→catを変更→int型に
 

別表をつくらないと、数字だけしかないのでさっぱりわからないな
 
別表のプライマリキーと参照元の参照したいとこの型は一致している必要がある
つまり別表のプライマリキーが1,2,3...としたいのだから、
対応するfoodsの外部キー(今変更した部分)はデータ型を一致させましょう
 
別表はこれ 
cats(テーブル名)
c_id cat
1    麺類 
2    洋食 
3    和食  
4    お菓子 
5    栄養補助食品 
 
参照元もcatをcat_idにして「揃えて」おくのが大変よろしい
テーブルが100とかになったら「idってどのidだろうか」になる
同じもの(参照先別表/参照元)は原則同じものにしておく
 
ではまず参照する方のカラム名を変えましょう
 
構造→catのところの変更→名前をc_idに
 
 

新規テーブルを作る
データベースlunchに移動
→テーブルを作成
名前:cats カラム数:2
 


  
上のように設定
オートインクリメント(A_i)は今回入れなくてよい(青い部分)
 

ではインサートしてみますか
INSERT INTO cats(c_id,cat) VALUE(1,"麺類");
INSERT INTO cats(c_id,cat) VALUE(2,"洋食");
INSERT INTO cats(c_id,cat) VALUE(3,"和食");
INSERT INTO cats(c_id,cat) VALUE(4,"お菓子");
INSERT INTO cats(c_id,cat) VALUE(5,"栄養補助食品");
 
(実行)
できた 
 
 

カテゴリ5を消す
DELETE from cats WHERE c_id=5;
 
一つ消えた 
 

複数テーブルからセレクトする
 
SELECT menu,price,catと書きたいとき
最初の2つはテーブルfoodsにあって、最後はcatsにある
 
今回ダブらないようにしているから上の通りでも大丈夫なんだけど、
テーブル名ドットカラム名と書くともしダブってる時でもいける
 
SELECT foods.menu, foods.price, cats.cat
 

今回はなくてもいいようにしたので、
SELECT menu, foods, cat
でもいいし、
外部キーだけcats.catとフルネームで記述し混ぜて記述したってかまわない
 

今回2つのテーブルにデータがまたがっているので、
from句も
 
SELECT menu, price, cat
 FROM foods,cats
 
と書きますが
これだとうまくない
次回に続く
 
PR

コメント

ただいまコメントを受けつけておりません。

プロフィール

HN:
karasumaru
性別:
非公開

P R