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

MySQL觸發(fā)器Trigger加載及目前局限性

 更新時間:2023年05月18日 09:20:50   作者:GreatSQL社區(qū)  
這篇文章主要為大家介紹了MySQL觸發(fā)器Trigger加載以及目前局限性詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

概念介紹

首先需要知道MySQL中觸發(fā)器特點,以及表table相關觸發(fā)器加載方式

  • MySQL中單個trigger僅支持單事件觸發(fā)即單個觸發(fā)器不支持類似insert or update等多事件語法操作,如果需要多事件都能被同一個表觸發(fā),只能分別建立多個對應trigger。
  • 觸發(fā)器加載首先需要加載觸發(fā)器分組列表Trigger_chain,后續(xù)再將具體觸發(fā)器添加到Trigger_chain內。
  • 表table屬性內可包含多個觸發(fā)器分組列表Trigger_chain,Trigger_chain用于加載不同類別的觸發(fā)器,主要類別有insert、update或delete類型。
  • 觸發(fā)器分組列表Trigger_chain內m_triggers又可加載多個具體屬于該分組的具體觸發(fā)器。

觸發(fā)器分組列表Trigger_chain加載過程

1.當打開表table時通過如下函數(shù)過程加載觸發(fā)器分組列表Trigger_chain

函數(shù)open_tables->open_and_process_table->handle_table->add_tables_and_routines_for_triggers

2.跟蹤add_tables_and_routines_for_triggers函數(shù)內參數(shù)定義

查看TRG_EVENT_MAX定義

enum enum_trigger_event_type {
TRG_EVENT_INSERT = 0,
TRG_EVENT_UPDATE = 1,
TRG_EVENT_DELETE = 2,
TRG_EVENT_MAX
};

查看TRG_ACTION_MAX定義

enum enum_trigger_action_time_type {
TRG_ACTION_BEFORE = 0,
TRG_ACTION_AFTER = 1,
TRG_ACTION_MAX
};

觸發(fā)器加載存儲方式

查看函數(shù)get_triggers內可知觸發(fā)器加載存儲方式是二維數(shù)組m_trigger_map內

/// Triggers grouped by event, action_time.
Trigger_chain *m_trigger_map[TRG_EVENT_MAX] [TRG_ACTION_MAX];
  • 綜合TRG_EVENT_MAX和TRG_ACTION_MAX以及m_trigger_map可以看出目前MySQL觸發(fā)器加載設計方式存在一定的弊端,即TRG_EVENT分組只能按insert、update、delete區(qū)分,單次觸發(fā)事件只能觸發(fā)執(zhí)行對應分組內的觸發(fā)器,對于需要擴展單觸發(fā)器同時支持多事件的方式如:insert or update 、update or delete 等方式將需要較大的改造。

觸發(fā)器分組列表Trigger_chain添加具體觸發(fā)器trigger過程

1.打開過的table其觸發(fā)器通過如下函數(shù)過程加載

  • 函數(shù)open_tables->open_table_entry_fini->check_n_load

2.具體加載過程

  • 通過函數(shù) check_n_load內調用load_triggers函數(shù)從磁盤加載已經(jīng)建好的觸發(fā)器t。
  • 然后調用create_trigger_chain函數(shù)獲取到前期已經(jīng)加載的觸發(fā)器分組列表Trigger_chain。
  • 最后觸發(fā)器分組列表Trigger_chain調用add_trigger添加具體觸發(fā)器t至分組列表內。
  • 當目標表table有insert、update或delete操作時,即會觸發(fā)執(zhí)行對應分組列表Trigger_chain內相應分組的觸發(fā)器。

說明:MySQL在新增和刪除觸發(fā)器的操作時都會關閉當前已經(jīng)打開的table句柄,在下次打開table時會重新load相應的trigger。

Enjoy GreatSQL :)

## 關于 GreatSQL

GreatSQL是由萬里數(shù)據(jù)庫維護的MySQL分支,專注于提升MGR可靠性及性能,支持InnoDB并行查詢特性,是適用于金融級應用的MySQL分支版本。

相關鏈接:

 GreatSQL社區(qū) 

 Gitee

 GitHub

以上就是MySQL觸發(fā)器Trigger加載及目前局限性的詳細內容,更多關于MySQL觸發(fā)器Trigger的資料請關注腳本之家其它相關文章!

相關文章

最新評論

兴城市| 宁阳县| 呈贡县| 安龙县| 泰兴市| 淮阳县| 冀州市| 屏南县| 新乡市| 苗栗市| 广平县| 乌兰察布市| 大洼县| 大余县| 大英县| 绵阳市| 根河市| 辽宁省| 射阳县| 邵武市| 抚州市| 卫辉市| 新疆| 手机| 开阳县| 张家界市| 黄陵县| 六枝特区| 兴山县| 调兵山市| 阳朔县| 铅山县| 洛隆县| 云南省| 慈溪市| 深水埗区| 灵川县| 台中县| 庐江县| 图木舒克市| 琼中|