0
例如我有一個用於記錄的表格。所以很舊的數據是無用的,沒有理由把它留在桌子上。我想創建一個觸發器,例如,如果現有行數超過10個,則會刪除舊行。我已經有了:如何在MySQL中使用觸發器來維護一定數量的行?
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後
這很糟糕。似乎一種方法是在應用程序邏輯中實現刪除操作。 –
一個典型的方法:1.將清理邏輯放入一個存儲過程中,2.在INSERT後獲得'LAST_INSERT_ID()',3.如果lastInsertID mod N == 0調用清理存儲過程,N是一個合理的數字(例如1000) –