テーブル内のカラム名を変更する (ALTER TABLE ~ RENAME COLUMN)
テーブル内の特定のカラムの名前を変更するには以下のようにします。
SQLite の場合
SQLite の ALTER TABLE はカラム名の変更に対応していません。
SQLite でカラム名を変更するには、テーブルを作り直す必要があります。
BEGIN TRANSACTION;
-- 既存のテーブルをリネーム
ALTER TABLE tbl_name RENAME TO tbl_temp;
-- 新しいテーブルを作成(元のテーブル名と同じ名前で)
CREATE TABLE tbl_name(col1 TEXT, col2_new TEXT);
-- レコードをすべて移す
INSERT INTO tbl_name(col1, col2_new) SELECT col1, col2 FROM tbl_temp;
-- 元のテーブルを削除
DROP TABLE tbl_temp;
COMMIT;Oracle の場合
Oracle データベースでは ALTER TABLE ~ RENAME COLUMN コマンドを使用してカラム名を変更することができます。
ALTER TABLE tbl_name RENAME COLUMN col_old TO col_new;
テーブルにカラムを追加する (ALTER TABLE ~ ADD COLUMN)
カラムを(末尾に)追加する
ALTER TABLE tbl_name ADD COLUMN new_col VARCHAR(10);任意の位置にカラムを追加する
MySQL の場合
MySQL の場合は、FIRST キーワードあるいは AFTER キーワードを使用することで、任意の位置にカラムを追加することができます。
ALTER TABLE tbl_name ADD COLUMN new_col VARCHAR(10) FIRST;ALTER TABLE tbl_name ADD COLUMN new_col VARCHAR(10) AFTER col1;SQLite の場合(MySQL 以外)
SQLite では新規カラムの追加位置を指定できません。 以下のようにテーブルを作り直して、レコードをすべてコピーする必要があります。
BEGIN TRANSACTION;
-- 既存のテーブルをリネーム
ALTER TABLE tbl_name RENAME TO tbl_temp;
-- 新しいテーブルを作成(元のテーブル名と同じ名前で)
CREATE TABLE tbl_name(col1 TEXT, col_new TEXT DEFAULT '', col2 TEXT);
-- レコードをすべて移す
INSERT INTO tbl_name(col1, col2) SELECT col1, col2 FROM tbl_temp;
-- 元のテーブルを削除
DROP TABLE tbl_temp;
COMMIT;テーブルからカラムを削除する (ALTER TABLE ~ DROP COLUMN)
SQLite の場合
SQLite の ALTER TABLE は、カラムの削除に対応していません。
SQLite でカラムを削除したい場合は、テーブルを作り直す必要があります。
BEGIN TRANSACTION;
-- 既存のテーブルをリネーム
ALTER TABLE tbl_name RENAME TO tbl_temp;
-- 新しいテーブルを作成(元のテーブル名と同じ名前で)
CREATE TABLE tbl_name(col1 TEXT, col3 TEXT);
-- レコードをすべて移す
INSERT INTO tbl_name(col1, col3) SELECT col1, col3 FROM tbl_temp;
-- 元のテーブルを削除
DROP TABLE tbl_temp;
COMMIT;MySQL の場合
MySQL では、ALTER TABLE コマンドを使用して特定のカラムを削除することができます。
ALTER TABLE tbl_name DROP COLUMN col_name;