導入
一度作ったテーブルも、後から作り替えられます。「列を追加したい」「名前を変えたい」「もう要らないので消したい」――こうした変更に使うのが ALTER TABLE と DROP TABLE です。CREATE TABLE とあわせて、DDL の基本がひととおりそろいます。
説明
列を追加する … ADD COLUMN。
ALTER TABLE users ADD COLUMN email TEXT;
追加した列は、既存の行では空(NULL)になります。SELECT * FROM users; で新しい email 列が増えたことを確認できます。
列の名前を変える … RENAME COLUMN。テーブルの名前を変える … RENAME TO。
ALTER TABLE users RENAME COLUMN city TO prefecture;
ALTER TABLE users RENAME TO members;
ALTER TABLE でできることは DB 製品によって差があります。SQLite は「列の追加・列名変更・表名変更」などに対応しますが、既存列への制約の後付けは限定的です。MySQL / PostgreSQL では ALTER TABLE ... MODIFY などでより多くの変更ができます。
テーブルごと消す … DROP TABLE。中のデータも定義もまとめて消えます。元に戻せない操作です。
flowchart LR
DEL["DELETE FROM t<br/>中の“行”を消す(表は残る)"]
DRP["DROP TABLE t<br/>“表そのもの”を消す(定義ごと消える)"]
DEL --- VS["≠"] --- DRP
DROP TABLE suppliers;
存在しないテーブルを消そうとするとエラーになります。「あれば消す」にしたいときは IF EXISTS を付けます(スクリプトの作り直しでよく使います)。
DROP TABLE IF EXISTS suppliers;
やってみよう
初期表示の ALTER TABLE users ADD COLUMN email TEXT; を実行し、SELECT * FROM users; で email 列が増えたことを確認しましょう。次に自分で CREATE TABLE temp (id INTEGER); を作り、DROP TABLE temp; で消してみてください。
演習
まず CREATE TABLE tags (id INTEGER PRIMARY KEY); でテーブルを作り、そこに label という文字列(TEXT)の列を追加してください。
ヒント1を見る
列の追加は ALTER TABLE テーブル名 ADD COLUMN 列名 型; の形です。
ヒント2を見る
ALTER TABLE tags ADD COLUMN label TEXT;(先に CREATE TABLE tags (id INTEGER PRIMARY KEY); を実行しておきます)