欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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時通過如下函數過程加載觸發(fā)器分組列表Trigger_chain

函數open_tables->open_and_process_table->handle_table->add_tables_and_routines_for_triggers

2.跟蹤add_tables_and_routines_for_triggers函數內參數定義

查看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ā)器加載存儲方式

查看函數get_triggers內可知觸發(fā)器加載存儲方式是二維數組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ā)器通過如下函數過程加載

  • 函數open_tables->open_table_entry_fini->check_n_load

2.具體加載過程

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

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

Enjoy GreatSQL :)

## 關于 GreatSQL

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

相關鏈接:

 GreatSQL社區(qū) 

 Gitee

 GitHub

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

相關文章

  • Windows免安裝MySQL?8.0.28?版本圖文教程

    Windows免安裝MySQL?8.0.28?版本圖文教程

    這篇文章主要為大家詳細介紹了Windows免安裝MySQL8.0.28版本圖文教程,文中安裝步驟介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • mysql如何在線修改主從復制選項

    mysql如何在線修改主從復制選項

    這篇文章主要介紹了mysql如何在線修改主從復制選項,幫助大家更好的理解和學習mysql,感興趣的朋友可以了解下
    2020-08-08
  • Mysql 實現字段拼接的三個函數

    Mysql 實現字段拼接的三個函數

    這篇文章主要介紹了Mysql 實現字段拼接的三個函數,幫助大家更好的理解和使用MySQL 數據庫,感興趣的朋友可以了解下
    2020-11-11
  • mysql數據庫太大了如何備份與還原

    mysql數據庫太大了如何備份與還原

    今天小編就為大家分享一篇關于mysql數據庫太大了如何備份與還原,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • Linux下自動備份MySQL的方法

    Linux下自動備份MySQL的方法

    這篇文章主要介紹了Linux下自動備份MySQL的方法,需要的朋友可以參考下
    2015-01-01
  • 探究MySQL優(yōu)化器對索引和JOIN順序的選擇

    探究MySQL優(yōu)化器對索引和JOIN順序的選擇

    這篇文章主要介紹了探究MySQL優(yōu)化器對索引和JOIN順序的選擇,包括在優(yōu)化器做出錯誤判斷時的選擇情況,需要的朋友可以參考下
    2015-05-05
  • mysql查詢結果命令行方式導出/輸出/寫入到文件的3種方法舉例

    mysql查詢結果命令行方式導出/輸出/寫入到文件的3種方法舉例

    這篇文章主要給大家介紹了關于mysql查詢結果命令行方式導出/輸出/寫入到文件的3種方法,?在使用MySQL進行數據庫操作的過程中,我們經常需要將查詢結果導出到文件中以備后續(xù)分析和處理,需要的朋友可以參考下
    2023-08-08
  • 詳解MySQL8.0 密碼過期策略

    詳解MySQL8.0 密碼過期策略

    這篇文章主要介紹了MySQL8.0 密碼過期策略的相關資料,幫助大家更好的理解和使用MySQL8.0的新功能,感興趣的朋友可以了解下
    2020-11-11
  • MySQL中創(chuàng)建表的三種方法匯總

    MySQL中創(chuàng)建表的三種方法匯總

    這篇文章主要介紹了MySQL中創(chuàng)建表的三種方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 如何添加一個mysql用戶并給予權限詳解

    如何添加一個mysql用戶并給予權限詳解

    在很多時候我們并不會直接利用mysql的root用戶進行項目的開發(fā),一般我們都會創(chuàng)建一個具有部分權限的用戶,下面這篇文章主要給大家介紹了關于如何添加一個mysql用戶并給予權限的相關資料,需要的朋友可以參考下
    2023-03-03

最新評論