テーブルstockでレコードが削除されるとき自動でバックアップテーブルに挿入するトリガ
DELIMITER ..
CREATE TRIGGERstock_auto_backup
BEFORE DELETE ONstock
FOR EACH ROW
BEGIN
INSERT INTOstock_backup
(code
,name
,num
,deleted_on
) VALUES (OLD.code
, OLD.name
, OLD.num
, unix_timestamp());
END..
DELIMITER ;
MySQLのunix_timestamp()関数により削除時間(now)を追加して記録することが出来る。
全てのUPDATE操作をログしたいとき、DELETEをUPDATEに書き換えれば、トリガでログしておけるので、操作側の修正の手間が省ける。
更に、一定以上古いバックアップを削除する機能もつける場合、END..の前に
DELIMITER ..
CREATE TRIGGERstock_auto_backup
BEFORE DELETE ONstock
FOR EACH ROW
BEGIN
INSERT INTOstock_backup
(code
,name
,num
,deleted_on
) VALUES (OLD.code
, OLD.name
, OLD.num
, unix_timestamp());
DELETE FROMstock_backup
WHERE unix_timestamp(deleted_on
)<(unix_timestamp()-60*60*24*7); END.. DELIMITER ;
の様にすれば、トリガ実行タイミングで7日より前のレコードをバックアップテーブルから自動削除できる。
なお、MySQLでは同じテーブルの同じ条件に複数のトリガを設定できないので、同じ条件に機能追加する場合は
DROP TRIGGER
stock_auto_backup
のようにしてトリガを一度削除する。
とあるテーブルのAUTO_INCREMENT値を変更する。
ALTER TABLE
stock
AUTO_INCREMENT = 1;
この場合はstockテーブルを1にしている。
(139)