MySQL:簡單記錄一下Waiting for commit lock
今天有個朋友問原始碼處哪裡控制了sql_safe_updates的邏輯,原始碼如下:
bool multi_delete_precheck(THD *thd, TABLE_LIST *tables) { SELECT_LEX *select_lex= thd->lex->select_lex; TABLE_LIST *aux_tables= thd->lex->auxiliary_table_list.first; TABLE_LIST **save_query_tables_own_last= thd->lex->query_tables_own_last; DBUG_ENTER("multi_delete_precheck"); /* sql_yacc guarantees that tables and aux_tables are not zero */ DBUG_ASSERT(aux_tables != 0); if (check_table_access(thd, SELECT_ACL, tables, FALSE, UINT_MAX, FALSE)) DBUG_RETURN(TRUE); /* Since aux_tables list is not part of LEX::query_tables list we have to juggle with LEX::query_tables_own_last value to be able call check_table_access() safely. */ thd->lex->query_tables_own_last= 0; if (check_table_access(thd, DELETE_ACL, aux_tables, FALSE, UINT_MAX, FALSE)) { thd->lex->query_tables_own_last= save_query_tables_own_last; DBUG_RETURN(TRUE); } thd->lex->query_tables_own_last= save_query_tables_own_last; if ((thd->variables.option_bits & OPTION_SAFE_UPDATES) && !select_lex->where_cond()) //這裡檢查是否開啟了引數同時沒有where條件 { my_message(ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE, ER(ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE), MYF(0));//報錯 DBUG_RETURN(TRUE); } DBUG_RETURN(FALSE); }
簡單記錄一下功能:
-
SQL_SAFE_UPDATES = 1時,不帶where和limit條件的update和delete操作語句是無法執行的,即使是有where和limit條件但不帶key column的update和delete也不能執行。
-
SQL_SAFE_UPDATES =0時,update和delete操作將會順利執行。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7728585/viewspace-2649833/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL Cases-記錄大量waiting for handler commitMySqlAIMIT
- MySQL5.7 Waiting for global read lockMySqlAI
- MySQL:簡單記錄訊號處理MySql
- MySQL新增索引偶遇waiting for table metadata lockMySql索引AI
- MySQL DDL Waiting for table metadata lock 解決MySqlAI
- 簡單記錄一下 laravel-swoole 的基本使用Laravel
- 記錄一下簡單的執行 Laravel Mix 命令Laravel
- MySQL:Innodb 讓MDL LOCK和ROW LOCK 記錄到errlogMySql
- Mysql Master-slave複製簡單配置記錄MySqlAST
- 記錄一下MySQL的連線MySql
- Waiting for table metadata lockAI
- MySQL:簡單記錄刪除binary log的介面MySql
- MySQL:connect_timeout引數簡單記錄MySql
- 簡單記錄一下新行動硬碟的初始化工作硬碟
- mysql 5.5 lock tables與隱式事務提交commitMySqlMIT
- MySQL:簡單記錄character_set_server影響引數MySqlServer
- Mysql鎖機制簡單瞭解一下MySql
- http報文簡單記錄HTTP
- 記錄一下
- 單車的重點和坑記錄一下
- create table if not exists Waiting for table metadata lockAI
- 簡單記錄下wkhtmltoimage的使用HTML
- Parcel 打包器簡單使用記錄
- sql注入學習簡單記錄SQL
- Blender Shader Node簡單記錄
- git如何清空所有的commit記錄GitMIT
- rosbridge簡單的安裝記錄ROS
- oracle表空間管理(簡單記錄)Oracle
- 美化完成記錄一下
- 【記錄】簡單的跨域中介軟體跨域
- Nginx的proxy_pass簡單使用記錄Nginx
- Windows環境下ELK簡單搭建記錄Windows
- AB(ApacheBench)工具簡單實用記錄Apache
- rust 語言試一下,記錄一下Rust
- ORA-04021: timeout occurred while waiting to lock objectWhileAIObject
- Another app is currently holding the yum lock; waiting for it to exit...APPAI
- ORA-04021,timeout occurred while waiting to lock objectWhileAIObject
- 記錄一下MySql update會鎖定哪些範圍的資料MySql