麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 數據庫 > MySQL > 正文

MySQL通過觸發器解決數據庫中表的行數限制詳解及實例

2024-07-24 13:12:55
字體:
來源:轉載
供稿:網友

MySQL通過觸發器解決數據庫中表的行數限制詳解及實例

最近項目一個需求是對操作日志的數量限制為10萬條,超過十萬條便刪除最舊的那一條,保存數據庫中日志數量不超過10萬。
當時我的第一想法是通過觸發器來做,便在數據庫中執行了如下的SQL:

delimiter $create trigger limitLogbeforeinserton OperationLogfor each rowbeginif (select count(*) from OperationLog) > 100000 thendelete from OperationLog limit 1;end if;end $delimiter ;

看起來似乎沒什么問題,對于insert前執行判斷,如果數量超過100000就執行刪除。但在真正數據庫超過100000條,也就是開始執行IF語句的時候就出問題,MySQL報錯:

ERROR 1442 (HY000): Can't update table 'OperationLog' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

查閱資料才知道,MySQL為了防止觸發器遞歸死循環的執行,不允許在某張表的觸發器中直接對該表進行DML(SELECT,DELETE,UPDATE,INSERT)操作,當然可以對其他表進行這樣操作。

觸發器限制的是執行對該表的DML操作。觸發器可以在你的執行前后來修改要執行的這一行數據,通過set關鍵字。

delimiter $create trigger setLogbeforeinserton OperationLogfor each rowbeginset NEW.action = 'test';end $delimiter ;

上述語句表示在insert OpetationLog表的之前,更新insert這條數據的action字段值為test,NEW就表示新添加的這條字段,同樣的OLD就表示delete時的字段。而在update的時候NEW以及OLD同時都可以使用。

臨時觸發器

剛剛談到的觸發器(Triggers)是基于某個表所產生的事件觸發的,而臨時觸發器也稱為事件調度器是基于特定時間周期觸發來執行某些任務。MySQL的事件調度器可以精確到每秒鐘執行一個任務,而操作系統的計劃任務(如:Linux下的CRON或Windows下的任務計劃)只能精 確到每分鐘執行一次。對于一些對數據實時性要求比較高的應用(例如:股票、賠率、比分等)就非常適合。

在使用這個功能之前必須確保event_scheduler已開啟,可執行

 GLOBAL event_scheduler = 1;

或者

SET GLOBAL event_scheduler = ON;

要查看當前是否已開啟事件調度器,可執行如下SQL:

SHOW VARIABLES LIKE 'event_scheduler';

SELECT @@event_scheduler;

SHOW PROCESSLIST;

而對于本文一開始提到的問題,使用這種機制則可完美解決:

delimiter $CREATE EVENT limitLog ON SCHEDULE EVERY 1 SECOND DO IF (select count(*) from OperationLog) > 100000 then delete from OperationLog limit 1;END IF $ delimiter ;

親測有效

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!


注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 羞羞羞网站 | 黄视频网站免费在线观看 | 黄 色 免费网 站 成 人 | 国产精品久久在线观看 | 久久精品日韩一区 | 欧美视频一区二区 | 免费国产网站 | 久久久经典视频 | 久久久噜噜噜久久熟有声小说 | 国产免费福利视频 | 欧洲精品久久 | 看91 | 欧美成人精品欧美一级 | 国av在线 | 日本羞羞的午夜电视剧 | 99精品国产小情侣高潮露脸在线 | 黄色大片在线观看 | 99国产精品欲a | 国产精品视频自拍 | 日本人乱人乱亲乱色视频观看 | 亚洲aⅴ在线观看 | 欧美一级毛片特黄黄 | 久久精品成人影院 | 久草在线视频免费播放 | 国产91在线高潮白浆在线观看 | 99视频在线观看视频 | 国产午夜精品一区二区三区视频 | 污版视频在线观看 | 国产一区网址 | 黄污免费网站 | 日韩美香港a一级毛片免费 欧美一级淫片007 | 91在线视频播放 | 久草在线网址 | 成人短视频在线观看免费 | 精精国产xxxx视频在线野外 | 一区二区三区日韩在线 | 在线观看国产免费视频 | sesee99| 999久久久久久 | 国产毛片网站 | 久久成人免费观看 |