概要
既存のテーブルのカラムを削除する方法。
OracleやMySQLのようにALTER TABLE ~ DROP COLUMN ~で削除する。
ver 3.35.0 以降で利用可能。
構文
ALTER TABLE table_name DROP COLUMN column_name
もしくは
ALTER TABLE table_name DROP column_name
複数のカラムを指定することはできない。
実行例
以下の「product」テーブルから「remark」カラムを削除する。
| カラム名 | データ型 | 制約 |
|---|---|---|
| id | integer | primary key |
| name | text | not null |
| quantity | integer | default 0 |
| remark | text |
環境
- Windows 10 64bit
- SQLite3 (3.35.2) Command-Line Shell
sqlite> --# 1.
sqlite> .schema product
CREATE TABLE product (
id integer primary key
, name text not null
, quantity integer default 0
, remark text
);
sqlite> --# 2.
sqlite> ALTER TABLE product DROP COLUMN remark;
sqlite> .schema product
CREATE TABLE product (
id integer primary key
, name text not null
, quantity integer default 0
);
- 現在の「product」テーブルのスキーマを確認
- 「alter table」でカラムを削除、スキーマが変更されていることを確認
上記の.schemaコマンドの結果を見るとわかるが、 カラムを削除した後はスキーマの見た目が崩れてしまう。
崩れてしまったスキーマ文を修正したい場合はこちら
SQLite 3 スキーマ文を編集する
エラーになるカラム
以下の要素を持つカラムはALTER TABLE ~ DROP COLUMNでは削除できない。
- 主キーとなっている
- ユニーク制約が設定されている
- インデックスが作成されている
- 部分インデックスで使用されている
- 他のカラムやテーブルのCHECK制約で使用されている
- 外部キー制約に使用されている
- 自動生成カラムで使用されている
- トリガーやビューで使用されている
上記のカラムをどうしても削除したい場合は、
ver 3.34.1 以下の時と同様の手順で
影響範囲を確認しつつ作業する。
SQLite 3 カラムを削除する (~ver 3.34.1)
エラーになる例
主キーやユニークキーが設定してあるカラムを削除しようとすると、 以下のようなエラーになる
sqlite> .schema product
CREATE TABLE product (
id integer primary key
, name text not null
, quantity integer default 0
, remark text
);
sqlite> ALTER TABLE product DROP COLUMN id;
Error: cannot drop PRIMARY KEY column: "id"
SQLite 3 カラムを削除する (~ver 3.34.1)
参考URL
-
ALTER TABLE DROP COLUMN
公式のカラム削除に関する情報
https://www.sqlite.org/lang_altertable.html#alter_table_drop_column