CREATE TRIGGER my_trigger AFTER UPDATE ON my_table
BEGIN
UPDATE my_table SET modified_date = datetime('now', 'localtime') WHERE data_id = OLD.data_id ;
END;
テーブル my_table に何かしらの更新があった時に
my_table のカラム modified_date に現在時刻をセットするSQL文が自動的に走ります。
UPDATE を INSERT,DELETE に変更すると、【INSERT】(データ登録)、【DELETE】(データ削除)時にSQL文が実行 されるようになります。
【AFTER】のところを【BEFORE】にするとテーブルの更新前に指定したSQL文が動きます。
【OLD】はUPDATE と DELETE 時に有効です。
【NEW】はUPDATE と INSERT 時に有効です。
INSERT時に OLD.data_id とやるとエラーとなります。
SELECT * FROM sqlite_master WHERE type = 'trigger';
DROP trigger my_trigger;
テーブルを作成するときに以下のようにします。
CREATE TABLE test_dt (
data_id integer PRIMARY KEY AUTOINCREMENT,
user_name varchar NOT NULL,
modified_date TIMESTAMP DEFAULT(DATETIME(‘now’,’localtime’))
);
このようにすると `
modified_date`
カラムはデータ登録に何も入力しなくても現在時刻が入力されます。
datetime('now', 'localtime')
です。
INSERT INTO
my_table (name, modified_date)
VALUES
'hogehoge, datetime('now', 'localtime');
コマンドラインから
sqlite3 --version
と入力します。
コマンドラインから
file my.db
と入力します。
my.db: SQLite 3.x database
というようにバージョンが返ってきます
SQLiteではHAVING句が使用できますので以下のように記述します。
テーブル【shop_master】から【shop_name】が重複するデータを抽出します。
SELECT * FROM shop_master GROUP BY shop_name HAVING COUNT(shop_name) > 1
SQliteではランダム関数は RANDOM() となります。
ですので
SELECT * FROM data_table ORDER BY RANDOM();
とすればOKです。
echo '.dump' | sqlite3 my.db > test.sql
cat test.sql | sqlite3 new.db
SQLiteの操作をしているとたまに
SQL error: database disk image is malformed
というメッセージに遭遇することがあります。
これはデータファイルが壊れている可能性があります。
そこで
sqlite3 my.db "PRAGMA integrity_check";
を実行します。
問題なければ【OK】が帰ってきます。