最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL通過觸發(fā)器解決數(shù)據(jù)庫中表的行數(shù)限制詳解及實例

 更新時間:2017年04月05日 11:08:54   投稿:lqh  
這篇文章主要介紹了MySQL通過觸發(fā)器解決數(shù)據(jù)庫中表的行數(shù)限制詳解及實例的相關(guān)資料,需要的朋友可以參考下

MySQL通過觸發(fā)器解決數(shù)據(jù)庫中表的行數(shù)限制詳解及實例

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

delimiter $
create trigger limitLog
before
insert
on OperationLog
for each row
begin
if (select count(*) from OperationLog) > 100000 then
delete from OperationLog limit 1;
end if;
end $

delimiter ;

看起來似乎沒什么問題,對于insert前執(zhí)行判斷,如果數(shù)量超過100000就執(zhí)行刪除。但在真正數(shù)據(jù)庫超過100000條,也就是開始執(zhí)行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為了防止觸發(fā)器遞歸死循環(huán)的執(zhí)行,不允許在某張表的觸發(fā)器中直接對該表進行DML(SELECT,DELETE,UPDATE,INSERT)操作,當然可以對其他表進行這樣操作。

觸發(fā)器限制的是執(zhí)行對該表的DML操作。觸發(fā)器可以在你的執(zhí)行前后來修改要執(zhí)行的這一行數(shù)據(jù),通過set關(guān)鍵字。

delimiter $
create trigger setLog
before
insert
on OperationLog
for each row
begin
set NEW.action = 'test';
end $

delimiter ;

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

臨時觸發(fā)器

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

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

 GLOBAL event_scheduler = 1;

或者

SET GLOBAL event_scheduler = ON;

要查看當前是否已開啟事件調(diào)度器,可執(zhí)行如下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 ;

親測有效

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

相關(guān)文章

  • mysql查找字符串函數(shù)的使用

    mysql查找字符串函數(shù)的使用

    這篇文章主要介紹了mysql查找字符串函數(shù)的使用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 淺析MySQL顯式類型轉(zhuǎn)換

    淺析MySQL顯式類型轉(zhuǎn)換

    這篇文章主要介紹了MySQL顯式類型轉(zhuǎn)換的基礎知識,通過實例給出了分析結(jié)果,一起學習下吧。
    2017-12-12
  • 登錄MySQL時出現(xiàn)Authentication plugin ‘caching_sha2_password‘ reported error錯誤的解決方案

    登錄MySQL時出現(xiàn)Authentication plugin ‘caching_sha2_pass

    這篇文章主要介紹了登錄MySQL時出現(xiàn)Authentication plugin ‘caching_sha2_password‘ reported error錯誤的解決方案,文中通過圖文結(jié)合的形式講解的非常詳細,對大家的解決問題有一定的幫助,需要的朋友可以參考下
    2024-12-12
  • MySQL5.7 JSON類型使用詳解

    MySQL5.7 JSON類型使用詳解

    MySQL5.7發(fā)布后,專門設計了JSON數(shù)據(jù)類型以及關(guān)于這種類型的檢索以及其他函數(shù)解析。 我們先看看MySQL老版本的JSON存取方式,具體內(nèi)容詳情大家參考下本文吧
    2017-10-10
  • 解決windows下mysql8修改my.ini設置datadir后無法啟動問題

    解決windows下mysql8修改my.ini設置datadir后無法啟動問題

    在修改MySQL的my.ini文件以更改數(shù)據(jù)目錄后,可能會遇到無法啟動的問題,這通常是因為字符編碼被改變或新路徑權(quán)限不足,正確的做法是備份my.ini文件,確保使用ANSI字符編碼修改datadir,并確保新路徑有足夠的權(quán)限,特別是SYSTEM或NETWORKSERVICE權(quán)限
    2025-01-01
  • Mysql服務器的啟動與停止(二)

    Mysql服務器的啟動與停止(二)

    Mysql服務器的啟動與停止(二)...
    2006-11-11
  • 如何修改mysql的隔離級別

    如何修改mysql的隔離級別

    MySQL的隔離級別是指數(shù)據(jù)庫事務的隔離程度,用于控制并發(fā)事務之間的相互影響,本文就詳細的介紹一下如何修改mysql的隔離級別,感興趣的可以了解一下
    2023-08-08
  • Centos MySQL 5.7安裝、升級教程

    Centos MySQL 5.7安裝、升級教程

    這篇文章主要為大家詳細介紹了Centos MySQL 5.7安裝、升級教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • mysql動態(tài)游標學習(mysql存儲過程游標)

    mysql動態(tài)游標學習(mysql存儲過程游標)

    mysql動態(tài)游標示例,通過準備語句、視圖和靜態(tài)游標實現(xiàn),大家參考使用吧
    2013-12-12
  • mysql存儲過程之錯誤處理實例詳解

    mysql存儲過程之錯誤處理實例詳解

    這篇文章主要介紹了mysql存儲過程之錯誤處理,結(jié)合實例形式詳細分析了mysql存儲過程錯誤處理相關(guān)原理、操作技巧與注意事項,需要的朋友可以參考下
    2019-12-12

最新評論

吴堡县| 福鼎市| 姚安县| 舞钢市| 峨边| 读书| 沙坪坝区| 房产| 宁安市| 会同县| 那曲县| 潍坊市| 班玛县| 娱乐| 西城区| 科技| 德令哈市| 合川市| 台前县| 灵璧县| 金寨县| 莱阳市| 满洲里市| 高邑县| 金沙县| 涪陵区| 宿迁市| 浦东新区| 体育| 岑溪市| 辛集市| 益阳市| 历史| 白朗县| 哈尔滨市| 塘沽区| 衡东县| 定兴县| 龙江县| 云龙县| 桑日县|