概要
既存のテーブルのカラムを削除する方法。
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