いつの間にか外部キー制約が可能に

2011/04/11 | SQLite

普段はあまり使わないSQLiteだったけど、最近ちょっとしたデータ格納手段として使っている(SQLでデータの検索ができるのが便利)。HTML5ではローカルの保存領域として使えるようになったということもあり、これからはSQLiteを使う機会が増えるのは間違いなさそう。

で、SQLiteの外部キー制約。以前は使えなかった(というか定義しても無意味だった)はずだが、3.6.19から使えるようになったとのこと(2009年10月リリースって・・・気づかなさすぎ・・・)。

FireFoxのアドオンSQLite Managerで確認してみた。サーバ上でPHPで作られたSQLiteデータベースをダウンロードして確認。

PRAGMA foreign_keys;

0

どうやらデフォルトでは対応していないらしい。そこで以下のコマンド。

PRAGMA foreign_keys=ON;
PRAGMA foreign_keys;

1

おぉ、これで使えるようになったらしい。

でも、phpinfo()で調べてみると、サーバのPHPで使用しているSQLiteのライブラリのバージョンは3.3.6となっていた。OSはCentOS5.5。標準のRPMパッケージではNGなようだ。うちで借りているVPSやら専用サーバやらは基本的に全てCentOSで、パッケージ管理はyum、標準のリポジトリに頼っている。つまり・・・使えないってことか。あ、共有サーバなら対応してるかも・・・。

10万件のデータ挿入

2011/04/07 | CLI, SQLite

PHPからSQLiteに10万件のデータを挿入してみた。CLI版で。pdo関数を使って。単に1件ずつINSERT文で挿入。データ自体は数値データ2つとテキストデータ(2文字)。サーバはVPS、OSはCentOS。

2時間弱かかった。結構かかるな。メモリはそんなに使わないみたい。

PHPとSQLiteでブログを開発する

昨今レンタルサーバは安価になった。以前は「独自ドメインはオプション」みたいなのもあったけど、今は独自ドメインが当たり前。それどころか月額1000円そこそこでマルチドメイン無制限、サブドメイン無制限、メールアドレス無制限なんてレンタルサーバもよく見るようになった。今はXserverがそこそこ安定しているように思う。

エックスサーバー

マルチドメイン無制限なレンタルサーバは他にもたくさんあるみたいだが、データベース数無制限とかデータベース容量無制限なんてサービスは、有名どころのサービスでは見たことがない。「ドメインやサブドメインを複数作ったら、その数だけデータベースも使いたい」というのが人情だと思うのだが・。

そんなときにSQLiteがいい。SQLiteは単なるファイルを設置するだけだから、数に制限もない。データベースに格納する容量もウェブ容量を超えなければ問題ない。だから最近自分のサイトを作るときはSQLiteを最大限活用するようにしている。

しかし、ブログ、PHPで動くブログでSQLiteを採用しているものってほとんど見かけない。Googleで検索してもうまく見つけられない。海外では存在するようだが、日本での知名度はほとんどないに等しいようだ。がんばって使ってみようかとも思ったけど、どうせなら自分好みのブログを、ということで自分で開発してみることにした(車輪の再発明とは言われたくない)。

ということで現在開発中。初版は最低限の機能だけ実装して、超簡単お手軽ブログソフトとして公開する予定。今のところ簡易CMS的な用途で使えるようなレベルにはなっているので、これを充実させていきたい。とりあえず正月明けにリリースしたいと思っている。本当はゆっくり開発したい気もするが、重たい案件を抱えてしまっていて、その息抜きのために自分の開発をしたい、ということが根底にある。現実逃避の手段として、本業と同じことをするって・・・不健康極まりないな。

SQLiteには外部キーがない?

2009/11/16 | SQLite

SQLiteには現時点で外部キーはないのか。最近のバージョンではあるらしい。正確に言うと3.6.19から。ただSQLiteのバージョンといっても、SQLiteというデータベースソフトウェアがあるわけではないから、SQLiteを取り扱うためのツール(PHPとかPerlとか)で使用しているライブラリに依存しているのだろう。ということでphpinfo()で確認してみることにした。

一つ目のレンタルサーバではSQLiteの項目そのものがない。あれ。でもpdo_sqliteがあったのでそちらを確認すると3.3.6となっていた。これって多分ダメなんだよね・・・。

次のを確認してみた。SQLiteの項目はあったけど、2.8.17となっている。これって古すぎじゃないの。で、pdo_sqliteを確認するとこちらでは3.2.8となっている。SQLiteのバージョンは3系にはなっているものの外部キーはだめそうだ。

SQLiteはそもそも外部キーを作成するためのSQLを実行すると、エラーも出ずそのまま通ってしまう点がちょっと怖い。コレで大丈夫と思ってバージョンを確かめずにいると痛い目にあう羽目になりそうだ。SQLiteを使う際はバージョン確認は必須だ(他のソフトの場合も当然といえば当然だが深刻度が違う)。

それよりも素のSQLiteとPDO経由のSQLiteでバージョンが違う点には驚いた。個別にコンパイルされるわけだから当然といえば当然なのだが・・・。後者の場合PHPのsqliteコマンドを使うのとPDO経由で使うのとでは当然扱いが違うんだろうなぁ。

SQLiteのインデックス

2009/11/08 | SQLite

普段SQLiteに触れる際はFireFoxのプラグイン「SQLite Manager」を使っている。以前はウェブベースで操作できる「SQLiteManager」(って同じ名前かよ)を使っていた。理由はSQLite2を取り扱うことができたから。あと、仕事で使ってみて、実際に稼動させてしまった環境で使うのに、ダウンロードやら何やらしている間にデータの欠損ができると嫌だったのでダイレクトに処理できるウェブベースな環境がよかったのだが・・・。今となってはSQLiteで納品する可能性はかなり低いし、PHP5な環境が一般的になりSQLite3だけ対応できていればいい。そしてローカルな環境でさえ動けばいい。そういう理由でプラグイン版を使用している。

でもSQLiteを使いこなすにはまだまだ初心者なのでいろいろとわからないことが多い(いや、SQLiteに限らずPHPもデータベース全般に対してもまだまだひよっこであるのだが)。SQLiteのインデックスのことがよくわからない。というかこれってFireFoxのプラグインの機能でインデックスを作成しようとするのが悪いのか(特殊なのか)、いったいどうすればよいのやら。

通常インデックスって「CREATE INDEX …」の構文で作成すればよいはず。ウェブで調べてもSQLiteも同様の書式で作成できると書いてある。実際にそのコマンドでインデックスができることも確認している。

FireFoxのプラグインで作ろうとすると、使用カラムを選択する際に「Ascending」か「Descending」を選ぶことになっている。この意味がわからない。並べ替えのために同じカラムに対して二つのインデックスを作成しなくてはいけないのか、それともまた別の意味なのか。

実際のところ、最大でも1000件くらいのデータしか投入しない予定なので、それほど問題にはならないのだが、イマイチすっきりしない。暇ができたら調べてみようと思うのだが・・・。


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net