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 sql_safe_updates 不支援子查詢的更新。MySql
- MySQL 組合索引不生效MySql索引
- MySQL引數檔案沒有生效MySql
- 技術分享 | MySQL:change buffer 何時生效MySql
- mysql5 7配置不生效解決記錄MySql
- DNS解析不生效原因及應對措施大盤點DNS
- 安全模式不能刪除使用SET SQL_SAFE_UPDATES = 0;模式SQL
- 對線面試官:Mysql組合索引的生效規則面試MySql索引
- crontab 備份docker mysql映象的資料庫不生效DockerMySql資料庫
- Spring宣告式事務注意點,以及不生效情況Spring
- maven,環境指定不生效,profiles指定不生效Maven
- tailwindcss不生效AICSS
- MySQL 5.6.19主從server-id不生效,The server is not configured as slaveMySqlServer
- docker下mysql連線數修改後不生效問題的解決DockerMySql
- aix .profile 不生效AI
- 使得.gitignore生效Git
- Mysql增加節點MySql
- 分享mysql注意點MySql
- MySQL知識點MySql
- mysql expire_logs_days是怎麼生效和計算出來的MySql
- DNS解析為什麼不生效?DNS解析不生效原因分析DNS
- parallel_index不生效ParallelIndex
- [Linux] alias永久生效Linux
- 案例解析:springboot自動配置未生效問題定位(條件斷點)Spring Boot斷點
- oracle動態取樣dynamic sampling hint為何不生效一點思考Oracle
- Mysql真的有缺點嗎?MySql
- Mysql 索引知識點MySql索引
- uniapp directive 在原生 wgt 包不生效 uniapp directive 不生效APP
- mysql和Oracle的特點,優缺點MySqlOracle
- Mokito多個ArgumentMatchers不生效
- spring cloud gateway 不生效SpringCloudGateway
- Linux修改IP永久生效Linux
- 華為遊戲試玩不生效遊戲
- .gitignore規則不生效Git
- redis RDB持久化不生效Redis持久化
- Oracle CAST函式不生效OracleAST函式
- thinkcmfx 修改選單不生效