SQLite で主キーのない既存テーブルに後から主キーを追加することができないか模索していたところ、以下の手順でできたのでメモしておきます。
- テンポラリでテーブルを作り、元のテーブルのデータをすべてコピー
- 元のテーブルを削除
- 主キーありで元のテーブルと同じ名前のテーブルを作成
- テンポラリテーブルから主キー以外のカラムをすべてコピー
- テンポラリテーブルを削除
以下は、name, english_name というカラムを持っている original_table というテーブルに id という主キーを追加する例です。追加した主キーには整数値が振られます。
CREATE TABLE 'temp_table' (
'name', 'english_name'
);
INSERT INTO 'temp_table'
SELECT "name", "english_name" FROM 'original_table';
DROP TABLE 'original_table';
CREATE TABLE 'original_table' (
'id' integer primary key,
'name' NOT NULL,
'english_name' NOT NULL);
INSERT INTO 'original_table'("name", "english_name")
SELECT "name", "english_name" FROM 'temp_table';
DROP TABLE 'temp_table';