2020年12月7日月曜日

SQLite3 カラムの名前を変更する (RENAME COLUMN)

概要

SQLite 3 でカラムの名前を変更するSQL。
他のDBMS同様にALTER TABLE~を利用する。


ALTER TABLE table_name RENAME old_name TO new_name;
                

もしくは


ALTER TABLE table_name RENAME COLUMN old_name TO new_name; 
                

OracleやMySQLだとALTER TABLE ~ MODIFY ~でも変更できるが、SQLite 3 ではこの構文は使えない。 さらに言うと、ALTER TABLEでカラムのデータ型を変更することもできない。 (ver. 3.33.0 時点)

Sqlite 3 カラムの型を変更する

環境
  • Windows 10 64bit
  • SQLite3 (3.33.0) Command-Line Shell

実行例

カラム名「id」を「product_id」に変更する


sqlite> .schema product
CREATE TABLE product
(
        id         integer
        , name     text
        , quantity integer
        , remark   text
);

sqlite> ALTER TABLE product RENAME COLUMN id TO product_id;

sqlite> .schema product
CREATE TABLE product
(
        product_id integer
        , name     text
        , quantity integer
        , remark   text
);
                

対象カラムを参照しているスキーマも一緒に変更される

ビュー、トリガー、外部キー制約などに記載されているカラム名が変更される。

  1. 「total_view」ビューが「product」テーブルの「quantity」を参照している
  2. 「product」テーブルの「quantity」を「price」に変更すると 「total_view」も「price」を参照するよう変更される

sqlite> .tables
product     total_view

sqlite> -- # 1.
sqlite> .schema total_view
CREATE VIEW total_view
AS
SELECT
    sum(quantity)
FROM
    "product"
/* total_view("sum(quantity)") */;

sqlite> -- # 2.
sqlite> ALTER TABLE product RENAME quantity TO price;
sqlite> .schema total_view
CREATE VIEW total_view
AS
SELECT
    sum(price)
FROM
    "product"
/* total_view("sum(price)") */;
                

参考URL