sqlite3で追加できないカラムを追加する
基本的にカラムを追加する場合は
ALTER TABLE テーブル ADD COLUMN カラム;
で追加できるのだが、追加できないカラムがある。
The column may not have a PRIMARY KEY or UNIQUE constraint.
SQLite Query Language: ALTER TABLE引用
The column may not have a default value of CURRENT_TIME, CURRENT_DATE, CURRENT_TIMESTAMP, or an expression in parentheses.
If a NOT NULL constraint is specified, then the column must have a default value other than NULL.
If foreign key constraints are enabled and a column with a REFERENCES clause is added, the column must have a default value of NULL.
ようするに、PRIMARY KEYやUNIQUE、DEFAULT値にCURRENT_TIME CURRENT_DATE CURRENT_TIMESTAMPを設定、DEFAULTのないNOT NULLなどは基本的に追加できない。
そこで、無理矢理カラムを追加してみた。
たぶん、やり方は2パターン(他にもあるかも)
- .dumpでデータベースのバックアップファイルを作成し、dumpファイルのCREATE文のところを編集し、.readする。
- テーブルをリネームし、新しくテーブルを作成したら、リネームしたデータベースから新しいデータベースにデータをINSERTする。
.dumpはテーブル数が多くなると時間がかかりかねないので、今回は二番目の方法でやってみた。
ALTER TABLE テーブル RENAME TO TMP; CREATE TABLE テーブル(ID, NAME, ...); <=新しいカラム追加 INSERT INTO テーブル(ID, NAME, ...) SELECT ID, NAME, ... FROM TMP; DROP TABLE TMP; VACUUM;
もっとスマートにできる方法ないかな。
- 作者: 西沢直木
- 出版社/メーカー: 翔泳社
- 発売日: 2009/05/19
- メディア: 大型本
- 購入: 2人 クリック: 99回
- この商品を含むブログ (15件) を見る
- 作者: 五十嵐貴之
- 出版社/メーカー: 技術評論社
- 発売日: 2010/10/22
- メディア: 単行本(ソフトカバー)
- クリック: 27回
- この商品を含むブログ (9件) を見る
CD付 SQL ゼロからはじめるデータベース操作 (プログラミング学習シリーズ)
- 作者: ミック
- 出版社/メーカー: 翔泳社
- 発売日: 2010/06/29
- メディア: 大型本
- 購入: 39人 クリック: 484回
- この商品を含むブログ (13件) を見る
- 作者: Jay A. Kreibich
- 出版社/メーカー: Oreilly & Associates Inc
- 発売日: 2010/08/26
- メディア: ペーパーバック
- クリック: 7回
- この商品を含むブログを見る