日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql sql_safe_updates 分析

發布時間:2025/3/13 数据库 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql sql_safe_updates 分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

排名前5的SQL悲劇中肯定有:

delete from table t /* where true */; update t set col='new_value' /* where true */
由于漏掉where條件或者拼接SQL后的where條件部分為true,這時整個表都被刪除/更新了...
在使用mysql的應用中,避免此類低級錯誤的方法: 1、應用仔細檢查(小心才能使得萬年船啊~) 2、開啟sql_safe_updates? mysql> set sql_safe_updates=1; Query OK, 0 rows affected (0.00 sec) mysql> delete from t; ERROR 1175 (HY000): You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column mysql> delete from t where 1=1; ERROR 1175 (HY000): You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column 本文根據mysql源碼介紹一下sql_safe_updates的邏輯
sql_safe_update開啟后,mysql server層在調用mysql_update/mysql_delete時對where和limit進行判斷后決定是否執行,代碼調用關系: dispatch_command |->mysql_parse|->mysql_execute_command->mysql_update/mysql_delete mysql_update:(sql/sql_update.cc)
當where條件中column沒有索引可用且無limit限制時會拒絕更新
  • /* If running in safe sql mode, don't allow updates without keys */if (table->quick_keys.is_clear_all()){thd->server_status|=SERVER_QUERY_NO_INDEX_USED;if (safe_update && !using_limit){my_message(ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE,ER(ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE), MYF(0));goto err;}}
  • mysql_delete中:(sql/sql_delete.cc)
    當where條件為常量或者為空,或者where條件中column沒有索引可用且無limit限制時拒絕刪除
  • const_cond= (!conds || conds->const_item());safe_update=test(thd->variables.option_bits & OPTION_SAFE_UPDATES);if (safe_update && const_cond){my_message(ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE,ER(ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE), MYF(0));DBUG_RETURN(TRUE);}.../* If running in safe sql mode, don't allow updates without keys */if (table->quick_keys.is_clear_all()){thd->server_status|=SERVER_QUERY_NO_INDEX_USED;if (safe_update && !using_limit){delete select;free_underlaid_joins(thd, select_lex);my_message(ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE,ER(ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE), MYF(0));DBUG_RETURN(TRUE);}}
  • PS: update在有limit時是可以執行更新的,而delete嚴格一些,只要where條件為常量或者為空是會被拒絕的,如: mysql> update t set str='hello' where 1=1 limit 1; Query OK, 0 rows affected (0.00 sec) mysql> delete from t where 1=1 limit 1; ERROR 1175 (HY000): You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column 不知道這是基于怎樣的考慮...
    不過開啟sql_safe_updates后,update和delete在修改數據時,如果不帶limit,需要where條件可以走索引,否則會報錯.

    轉載于:https://www.cnblogs.com/duanxz/p/3891540.html

    總結

    以上是生活随笔為你收集整理的mysql sql_safe_updates 分析的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 韩国美女主播跳舞 | 男人女人拔萝卜视频 | 99爱视频 | 日韩午夜在线视频 | 欧美精品激情 | 日韩亚洲欧美在线 | 国产第一草草影院 | 91一区二区三区在线观看 | 69视频免费观看 | 亚洲成av人片一区二区 | 凹凸视频一区二区 | 亚洲制服无码 | 18被视频免费观看视频 | av电影中文字幕 | 国产99久久久欧美黑人 | 中国在线观看免费视频 | 大乳女喂男人吃奶视频 | 国产成年人视频网站 | 黄色网址哪里有 | 毛片aaa | 国产精品自拍网站 | 免费jizz| 亚洲免费婷婷 | 久久精品欧美一区 | 亚洲成人欧美 | 精品成人无码一区二区三区 | 男女视频免费网站 | 男人透女人免费视频 | 无码人妻久久一区二区三区不卡 | 草逼视频网站 | 中文字幕在线1 | 干干日日| 亚洲影院一区二区三区 | 内裤摩擦1v1h | 成长快手短视频在线观看 | 香蕉久久一区二区三区 | 欧美日韩操 | 97视频在线观看免费高清完整版在线观看 | 天天操女人 | 在线观看日本网站 | 成年人爱爱视频 | 韩国日本在线 | 影音先锋色小姐 | 日本人妻不卡一区二区三区中文字幕 | 播色屋| 素人一区二区三区 | av电影免费在线播放 | aa视频在线 | 13日本xxxxxⅹxxx20 | 国产拍拍拍拍拍拍拍拍拍拍拍拍拍 | 91精品人妻一区二区三区 | 九色porny丨精品自拍视频 | 嫩草嫩草嫩草嫩草 | 欧美美女一区二区三区 | 国产一级黄色大片 | 一吻定情2013日剧 | 美妇av| 青青青免费在线视频 | av毛片在线 | 久久久久久久久久久久久久国产 | 激情视频网站在线观看 | 日韩精品在线视频免费观看 | 综合久久综合 | 日韩欧美专区 | 日本a级片免费 | 色久婷婷| www国产91| 国产视频福利在线观看 | 国产一二精品 | 成人精品一区二区三区四区 | 久久久久久草 | 91极品蜜桃臀 | 中文字幕第二页 | 精品一区二区三区免费毛片爱 | 亚洲av无码一区二区三区在线 | 黄色天堂av | 原创真实夫妻啪啪av | 这里只有精品在线播放 | 亚洲成人伊人 | 性生交大片免费看狂欲 | 在线观看视频国产 | 玖玖爱这里只有精品 | x88av在线 | 久久精品国产成人av | 可以直接在线观看的av | 亚洲精品视频一区二区三区 | 日韩91av | 日韩欧美福利视频 | 欧美成在线视频 | 久久精品国产清自在天天线 | 日韩一区二区三区在线观看视频 | 欧美熟妇精品黑人巨大一二三区 | 好色av| 午夜不卡在线观看 | 男人的天堂视频在线观看 | 欧美成人毛片 | 爱爱爱爱网站 | 亚洲欧洲国产日韩 | 国产一区二区精品久久 |