ToB企服应用市场:ToB评测及商务社交产业平台

标题: MySQL触发器Trigger加载以及目前局限 [打印本页]

作者: 八卦阵    时间: 2023-5-17 13:10
标题: MySQL触发器Trigger加载以及目前局限
概念介绍

首先需要知道MySQL中触发器特点,以及表table相关触发器加载方式
触发器分组列表Trigger_chain加载过程

1.当打开表table时通过如下函数过程加载触发器分组列表Trigger_chain
  1. 函数open_tables->open_and_process_table->handle_table->add_tables_and_routines_for_triggers
复制代码
2.跟踪add_tables_and_routines_for_triggers函数内参数定义

查看TRG_EVENT_MAX定义
  1. enum enum_trigger_event_type {
  2. TRG_EVENT_INSERT = 0,
  3. TRG_EVENT_UPDATE = 1,
  4. TRG_EVENT_DELETE = 2,
  5. TRG_EVENT_MAX
  6. };
复制代码
查看TRG_ACTION_MAX定义
  1. enum enum_trigger_action_time_type {
  2. TRG_ACTION_BEFORE = 0,
  3. TRG_ACTION_AFTER = 1,
  4. TRG_ACTION_MAX
  5. };
复制代码
查看函数get_triggers内可知触发器加载存储方式是二维数组m_trigger_map内
  1. /// Triggers grouped by event, action_time.
  2. Trigger_chain *m_trigger_map[TRG_EVENT_MAX] [TRG_ACTION_MAX];
复制代码
触发器分组列表Trigger_chain添加具体触发器trigger过程

1.打开过的table其触发器通过如下函数过程加载

2.具体加载过程

当目标表table有insert、update或delete操作时,即会触发执行对应分组列表Trigger_chain内相应分组的触发器。
说明:MySQL在新增和删除触发器的操作时都会关闭当前已经打开的table句柄,在下次打开table时会重新load相应的trigger。

Enjoy GreatSQL
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4