仕事で未だにPHPのバージョンが4のサーバ上で動かすシステムの開発の案件がちらほらあります。そんでDBサーバーも搭載してないとかでSQLiteを使ったりします。
PHP4ではSQLiteの3が使えないということで2を使うんですが、古くて機能不足なのでいろいろ不便です。
たとえば ALTER TABLE
が使えないのでテーブルのカラム追加ができません。なので代用手段を用いてやります。
例としてhogeというテーブルにカラム追加したいときの手順。
- hogeテーブルと同じ構成のテンポラリテーブルを作成
- テンポラリテーブルにhogeテーブルのレコードを全コピー
- hogeテーブルを削除する
- 新しいカラム構成でhogeテーブルを作成
- hogeテーブルにテンポラリテーブルのレコードを全コピー
- テンポラリテーブルを削除
結構面倒です。カラム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とかいうのもうやめてくれ。。。
コメント