SQLを久々にやってぜ
会社の研修でSQLとかを使うのでその復習。
とりあえず、外部参照あたりを復習しました。
テーブルの文字コード設定
http://mysql.javarou.com/dat/000571.html
外部参照
http://www.techscore.com/tech/sql/SQL3/03_04.html/
外部キー(ON DELETE CASCADE)
http://www.atmarkit.co.jp/flinux/rensai/mysql5_08/mysql5_08c.html
外部参照とかの後でON DELETE CASCADEとか書くと、
親テーブルでの参照先のレコードが消された場合に、子供の方も消えるというもの。
下は試しに書いてみたサンプルコードです。
--ロボットテーブルの作成
CREATE TABLE robot
(
id INTEGER PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) UNIQUE
) CHARACTER SET sjis;
--ロボットテーブルにデータを追加
INSERT INTO robot(name) VALUES('ガンダム');
INSERT INTO robot(name) VALUES('ザク');
INSERT INTO robot(name) VALUES('マジンガーゼット');
INSERT INTO robot(name) VALUES('ライオコンボイ');
--パイロットテーブルの作成
CREATE TABLE pilot
(
id INTEGER PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) UNIQUE
)CHARACTER SET sjis;
--パイロットテーブルにデータを追加
INSERT INTO pilot(name) VALUES('アムロ=レイ');
INSERT INTO pilot(name) VALUES('シャア=アズナブル');
INSERT INTO pilot(name) VALUES('パプティマス=シロッコ');
INSERT INTO pilot(name) VALUES('碇シンジ');
INSERT INTO pilot(name) VALUES('兜甲児');
--ロボットとパイロットの乗り込み可能表を作成
CREATE TABLE norikomi
(
id SERIAL PRIMARY KEY,
robo_id INTEGER,
pilot_id INTEGER,
FOREIGN KEY (robo_id)
REFERENCES robot(id) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (pilot_id)
REFERENCES pilot(id) ON DELETE CASCADE ON UPDATE CASCADE
) CHARACTER SET sjis;
--乗り込み表示にデータを追加
INSERT INTO norikomi (robo_id , pilot_id) VALUES( 1 , 1 );
INSERT INTO norikomi (robo_id , pilot_id) VALUES( 1 , 2 );
INSERT INTO norikomi (robo_id , pilot_id) VALUES( 1 , 3 );
INSERT INTO norikomi (robo_id , pilot_id) VALUES( 2 , 1 );
INSERT INTO norikomi (robo_id , pilot_id) VALUES( 2 , 2 );
INSERT INTO norikomi (robo_id , pilot_id) VALUES( 2 , 3 );
INSERT INTO norikomi (robo_id , pilot_id) VALUES( 3 , 4 );
--乗り込み表の表示
select * from norikomi;
--アムロの削除
DELETE FROM pilot WHERE id = 1;
--乗り込み表の表示
select * from norikomi;