たとえば、ロギングに使用されるテーブルがあります。したがって、非常に古いデータは役に立たず、テーブルに残す理由はありません。たとえば、既存の行数が 10 を超える場合に古い行を削除するトリガーを作成します。私がすでに持っているもの:
CREATE TABLE log (
logId INT UNSIGNED NOT NULL AUTO_INCREMENT,
firstLogin DATETIME NOT NULL,
lastLogin DATETIME NOT NULL,
fingerprint VARCHAR(64) CHARACTER SET BINARY,
ip VARCHAR(24) NOT NULL,
accountId INT UNSIGNED NOT NULL,
FOREIGN KEY (accountId)
REFERENCES accounts (accountId)
ON UPDATE CASCADE ON DELETE CASCADE,
PRIMARY KEY (logId)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
DELIMITER |
CREATE TRIGGER logbeforeinsert BEFORE INSERT ON log
FOR EACH ROW
BEGIN
SET @rowcount = (SELECT COUNT(*) FROM log WHERE accountId = NEW.accountId);
IF @rowcount > 9 THEN
DELETE FROM log WHERE accountId = NEW.accountId LIMIT 1;
END IF;
END;
|
DELIMITER ;
しかし、このトリガーを使用すると、行数が10に達した後、挿入がまったく停止しました。