首页 > 数据库 > MySQL > MySQL触发器Trigger加载以及目前局限
* GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。
首先需要知道MySQL中触发器特点,以及表table相关触发器加载方式
函数open_tables->open_and_process_table->handle_table->add_tables_and_routines_for_triggers
enum enum_trigger_event_type {
TRG_EVENT_INSERT = 0,
TRG_EVENT_UPDATE = 1,
TRG_EVENT_DELETE = 2,
TRG_EVENT_MAX
};
enum enum_trigger_action_time_type {
TRG_ACTION_BEFORE = 0,
TRG_ACTION_AFTER = 1,
TRG_ACTION_MAX
};
/// Triggers grouped by event, action_time.
Trigger_chain *m_trigger_map[TRG_EVENT_MAX] [TRG_ACTION_MAX];
通过函数 check_n_load内调用load_triggers函数从磁盘加载已经建好的触发器t。
然后调用create_trigger_chain函数获取到前期已经加载的触发器分组列表Trigger_chain。
最后触发器分组列表Trigger_chain调用add_trigger添加具体触发器t至分组列表内。
当目标表table有insert、update或delete操作时,即会触发执行对应分组列表Trigger_chain内相应分组的触发器。
说明:MySQL在新增和删除触发器的操作时都会关闭当前已经打开的table句柄,在下次打开table时会重新load相应的trigger。
Enjoy GreatSQL :)
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70027826/viewspace-2952588/ ,如需转载,请注明出处,否则将追究法律责任。