[PHP] SQLite2でテーブルにカラムを追加する

  • このエントリーをはてなブックマークに追加

仕事で未だにPHPのバージョンが4のサーバ上で動かすシステムの開発の案件がちらほらあります。そんでDBサーバーも搭載してないとかでSQLiteを使ったりします。
PHP4ではSQLiteの3が使えないということで2を使うんですが、古くて機能不足なのでいろいろ不便です。
たとえば ALTER TABLE が使えないのでテーブルのカラム追加ができません。なので代用手段を用いてやります。

例としてhogeというテーブルにカラム追加したいときの手順。

  1. hogeテーブルと同じ構成のテンポラリテーブルを作成
  2. テンポラリテーブルにhogeテーブルのレコードを全コピー
  3. hogeテーブルを削除する
  4. 新しいカラム構成でhogeテーブルを作成
  5. hogeテーブルにテンポラリテーブルのレコードを全コピー
  6. テンポラリテーブルを削除

結構面倒です。カラムa,bをもつhogeテーブルにカラムcを追加する場合は以下のようなSQLを書けばOKだと思います。

BEGIN TRANSACTION;

-- hogeをコピーしたテーブルを作る
CREATE TEMPORARY TABLE hoge_temp(a, b);
INSERT INTO hoge_temp SELECT * FROM hoge;

-- 古いhogeテーブルを削除
DROP TABLE hoge;

-- カラムを追加した新しいhogeテーブルを作る
CREATE TABLE hoge (a, b, c);
INSERT INTO hoge SELECT *,NULL FROM hoge_temp;

-- 古いhogeのコピーテーブルを削除する
DROP TABLE hoge_temp;

COMMIT;

コピーテーブルから新しいテーブルにデータをコピーするときに、新しいカラムのデータとしてNULLを入れるのがポイントですかね。

今から新規導入するサーバでPHP4とかいうのもうやめてくれ。。。

  • このエントリーをはてなブックマークに追加

SNSでもご購読できます。




コメントを残す