2021年4月10日土曜日

SQLite3 カラムを削除する (DROP COLUMN)

概要

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

「product」テーブル
カラム名 データ型 制約
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
        );
                
  1. 現在の「product」テーブルのスキーマを確認
  2. 「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"
                
ver 3.34.1 以下でカラムを削除したい場合は以下を参照のこと。
SQLite 3 カラムを削除する (~ver 3.34.1)

参考URL