SQL

スキーマ書き直した

SQL

だいたい7割方は書き直して、古いdbからデータを移す。ほとんどnullしか入らないカラムを別テーブルに切り離したり、名前ちょっと微妙だったのもいい機会だから直したり。で、一緒にdbにアクセスするスクリプトも手を入れてる。だいぶ書き直したので、そのま…

ビューにトリガーを張る

SQLiteだとビューは読み取り専用で、INSERT、UPDATE、DELETEできないので、代わりにトリガーを使う。とりあえずINSERTだけメモ。最小限しか書いてないので、実際に使うときはもう少し必要だろうね。NOT NULL制約がかかってたりするかもしれないし、UPDATEとD…

CREATE INDEX

SQL

頻繁に検索するのにインデックス張ってないカラムがあったので、いくつかCREATE INDEXしておく。あと、不要なインデックスがあったので、それはDROP INDEX。なんであんなインデックス張ってたんだろう…?

SQLiteってBOOLEAN型ないのね

SQL

しょうがないからCONSTRAINTで変な値は弾くようにしておいた。 CREATE TABLE tbl ( col DEFAULT NULL, CONSTRAINT ct_col CHECK (col IN (0, 1) OR col IS NULL) ); とはいってもNULLも含めた3値論理にしてあるけど。 追記 05/06 10:33 このカラムにインデッ…

DBD::SQLiteでREGEXP演算子を使うメモ

UDFにしないといけない。UTF-8決めうちにしてるけど、SQLiteで日本語使うのに他の文字コード使う理由もそうないだろうし、別にいいよね。 use DBI; use Encode qw/decode/; my $dbh = DBI->connect('dbi:SQLite:dbname=sqlite3.db', '', '') or die $!; $dbh…

SQLiteメモ

SQL

INSERT OR REPLACE INTO tbl VALUES (v1, v2, ...);

メモ

SQL

テーブルからランダムに取り出すためのSQL文。 SELECT id FROM tbl ORDER BY RANDOM() LIMIT 10; これはSQLiteでの場合なので、他のRDBMSだと違うのかもしれないけど。

こないだ書いた一括で登録するスクリプトが間違ってた

SQL

ので、43000件ほどUPDATEを発行する羽目に。まあ、スクリプトも修正したし、これから追加する分は問題ないはず。 UPDATE table SET post = ? WHERE id = ?

my $sth = $dbh->prepare('INSERT OR IGNORE INTO image (image_id, suffix, width, height, size, post) VALUES (?, ?, ?, ?, ?, ?)'); SELECT * FROM image WHERE 100 * height / width == 75 and width >= 1024 ORDER BY post DESC heightもwidthもINTEGE…

SQL覚えてないとつらいなぁ

DBIを使って直でSQLを書いてるから、SQLの書き方がわからないとちょっと面倒。まあ、それくらいはちょっと調べたら大体よさそうなのが見つかるので調べればいいんですが。

テーブル構造

SQL

テーブル構造で悩んでる状況。うー、どうしようかなぁ。imageとinfoとtagで一応確定。次はカリカリとコーディング。

リファレンス

SQL

やっぱり必要だなぁ。DBIC使ってるけどO/Rマッパーまかせにできないこともあるし。SQLiteは確かSQL92準拠だったかな?確認したら、SQLiteの実装はSQL92のサブセットでした。公式に文法リファレンスがあったはずだから、一通りローカルにコピーをとっておこう…

制約

NOT NULL制約のかけ忘れがあったので、sqlite3 Evangeline.dbから修正。tagテーブルのtag_idカラムにNOT NULLを振ってなかった。データは入ってないから、DROP TABEL tagしてからCREATE TABLE tagで再作成。なくても動くけど、完全を追求したいのです。で、…