Index: sql/sql_base.cc =================================================================== --- sql/sql_base.cc (版本 1044530) +++ sql/sql_base.cc (工作副本) @@ -4696,10 +4696,10 @@ { if (table->triggers) { - *need_prelocking= TRUE; + //*need_prelocking= TRUE; if (table->triggers-> - add_tables_and_routines_for_triggers(thd, prelocking_ctx, table_list)) + add_tables_and_routines_for_triggers(thd, prelocking_ctx, table_list,need_prelocking)) return TRUE; } Index: sql/sql_trigger.cc =================================================================== --- sql/sql_trigger.cc (版本 1044530) +++ sql/sql_trigger.cc (工作副本) @@ -2227,7 +2227,7 @@ Table_triggers_list:: add_tables_and_routines_for_triggers(THD *thd, Query_tables_list *prelocking_ctx, - TABLE_LIST *table_list) + TABLE_LIST *table_list,bool *need_prelocking) { DBUG_ASSERT(static_cast(table_list->lock_type) >= static_cast(TL_WRITE_ALLOW_WRITE)); @@ -2236,12 +2236,15 @@ { if (table_list->trg_event_map & trg2bit(static_cast(i))) { + for (int j= 0; j < (int)TRG_ACTION_MAX; j++) { Trigger *triggers= table_list->table->triggers->get_trigger(i,j); for ( ; triggers ; triggers= triggers->next) { + *need_prelocking = TRUE; + sp_head *trigger= triggers->body; if (unlikely(!triggers->body)) // Parse error Index: sql/sql_trigger.h =================================================================== --- sql/sql_trigger.h (版本 1044530) +++ sql/sql_trigger.h (工作副本) @@ -273,7 +273,7 @@ bool add_tables_and_routines_for_triggers(THD *thd, Query_tables_list *prelocking_ctx, - TABLE_LIST *table_list); + TABLE_LIST *table_list,bool *need_prelocking); Field **nullable_fields() { return record0_field; } void reset_extra_null_bitmap()