構成を変更する
ALTER TABLEにより列やテーブルの構成を変更できる。RDBMSにより記述が大きく異なる場合が多く、以下ではMySQLの場合を例にしている。
列の追加
ALTER TABLE tbl_book ADD writer VARCHAR(30);
デフォルト値も指定できるが、既存の行にはNULL値が入る。
列の削除
ALTER TABLE tbl_book DROP price;
制約を追加する
ALTER TABLE tbl_keiri ADD PRIMARY KEY(denpyo_bango);
テーブル名を変更する
ALTER TABLE tbl_book RENAME TO tbl_hon; -- tbl_bookが元のテーブル名、tbl_honが新しいテーブル名
列名を変更する
ALTER TABLE tbl_book CHANGE code b_no INTEGER; -- codeは元の列名、b_noが新しい列名
デフォルト値の追加
ALTER TABLE tbl_book ALTER COLUMN book_no SET DEFAULT 100;
既存の値は影響を受けない。
デフォルト値の削除
ALTER TABLE tbl_book ALTER book_no DROP DEFAULT;
既存の値は影響を受けない。
データ型の変更
ALTER TABLE tbl_book MODIFY writer VARCHAR(20);
外部キー
- tbl_bのnoの値はtbl_aの主キーであるnoの列の値のどれかでなければならない、というような制約があるとき、tbl_bのnoは外部キーと呼ばれる。
- 外部キーはtbl_aのnoを参照するので参照キーとも呼ぶ。
- 外部キーが参照する列は親キーと呼び、親キーを持つテーブルを親テーブル、外部キーをもつテーブルを子テーブルと呼ぶ。
- 親キーの値を変更したとき小キーの値を自動的に変更させられる(連鎖更新)
- 親テーブルの値を削除したとき対応する小テーブルの値を削除させられる(連鎖削除)
- 親テーブルを小テーブルより先に削除してはならない
- 小テーブルの外部キーは必ず親テーブルの親キーに存在していなければならない
外部キーの設定
テーブル作成時に外部キーを設定する場合、REFERENCESにより親テーブルと親キーを指定する。
no INT REFERENCES tbl_book(code)
テーブル制約としても指定できる。
FOREIGN KEY (no) REFERENCES tbl_book(code)
ALTER TABLEにより後から追加することも出来る。
ALTER TABLE tbl_ehon ADD FOREIGN KEY(no) REFERENCES tbl_book(code);