MySQL:sql_safe_updates生效點
歡迎關注我的《深入理解MySQL主從原理 32講 》,如下:
![image.png](https://upload-images.jianshu.io/upload_images/7398834-0ffa3bdc078cddf4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
如果圖片不能顯示可檢視下面連結:
今天有個朋友問原始碼處哪裡控制了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-2649832/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MYSQL的安全模式:sql_safe_updates介紹MySql模式
- MySQL 組合索引不生效MySql索引
- MySQL引數檔案沒有生效MySql
- 技術分享 | MySQL:change buffer 何時生效MySql
- mysql5 7配置不生效解決記錄MySql
- crontab 備份docker mysql映象的資料庫不生效DockerMySql資料庫
- 對線面試官:Mysql組合索引的生效規則面試MySql索引
- DNS解析不生效原因及應對措施大盤點DNS
- mysql expire_logs_days是怎麼生效和計算出來的MySql
- maven,環境指定不生效,profiles指定不生效Maven
- docker下mysql連線數修改後不生效問題的解決DockerMySql
- 使得.gitignore生效Git
- tailwindcss不生效AICSS
- StrictSlash不生效
- Mysql增加節點MySql
- 分享mysql注意點MySql
- MySQL知識點MySql
- 案例解析:springboot自動配置未生效問題定位(條件斷點)Spring Boot斷點
- uniapp directive 在原生 wgt 包不生效 uniapp directive 不生效APP
- 讓height: 100%生效
- 前端debugger未生效前端
- dcat中文不生效
- Mysql真的有缺點嗎?MySql
- DNS解析為什麼不生效?DNS解析不生效原因分析DNS
- spring cloud gateway 不生效SpringCloudGateway
- Linux修改IP永久生效Linux
- .gitignore規則不生效Git
- MySQL的timeout那點事MySql
- MySQL Json有哪些缺點MySqlJSON
- MySQL知識點總結MySql
- MySQL索引的優缺點MySql索引
- mysql根據節點查詢所有葉節點MySql
- Mokito多個ArgumentMatchers不生效
- qt樣式表未生效QT
- redis RDB持久化不生效Redis持久化
- thinkcmfx 修改選單不生效
- windows下mysql修改表名大訊息引數lower_case_table_names,需要initialize才生效WindowsMySql
- 盤點Mysql的登陸方式MySql