MYSQL的安全模式:sql_safe_updates介紹

什么是安全模式

在mysql中纹坐,如果在update和delete沒有加上where條件,數(shù)據(jù)將會全部修改吠裆。不只是初識mysql的開發(fā)者會遇到這個問題涂炎,工作有一定經(jīng)驗(yàn)的工程師難免也會忘記寫入where條件。為了避免失誤造成的數(shù)據(jù)全部修改和刪除赂蕴,可開啟mysql的安全模式柳弄。

安全模式的開啟與關(guān)閉

連接到數(shù)據(jù)庫后,查看當(dāng)前mysql的安全模式的狀態(tài)

mysql> show variables like 'sql_safe_updates';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| sql_safe_updates | ON    |
+------------------+-------+
1 row in set (0.00 sec)

上面查詢命令實(shí)例表示當(dāng)前mysql處于安全模式打開的狀態(tài)概说。
set sql_safe_updates=1; //安全模式打開狀態(tài)
set sql_safe_updates=0; //安全模式關(guān)閉狀態(tài)

在update操作中:當(dāng)where條件中列(column)沒有索引可用且無limit限制時會拒絕更新碧注。where條件為常量且無limit限制時會拒絕更新。

在delete操作中: 當(dāng)①where條件為常量糖赔,②或where條件為空萍丐,③或where條件中 列(column)沒有索引可用且無limit限制時拒絕刪除。

安全模式UPDATE操作實(shí)例

1挂捻、無where條件的update

mysql> update users set status=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

操作失敗碉纺,提示需要使用where條件作為主鍵。

2刻撒、無where條件但是有l(wèi)imit的update

mysql> update users set status=1 limit 1;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1  Changed: 0  Warnings: 0

操作成功骨田,雖然沒有where條件,但是加入了limit限制声怔。

3态贤、使用非索引字段作為條件進(jìn)行更新

mysql> update users set status=1 where reg_time>'2018-01-01 00:00:00';
ERROR 1175 (HY000): You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column

操作失敗,因?yàn)闂l件字段不是索引字段并且沒有加入limit限制醋火。

4悠汽、使用非索引字段作為條件并且加入limit進(jìn)行更新

mysql> update users set status=1 where reg_time>'2018-01-01 00:00:00' limit 10;
Query OK, 0 rows affected (0.01 sec)
Rows matched: 10  Changed: 0  Warnings: 0

操作成功,雖然條件字段不是索引字段芥驳,但是有加入limit限制柿冲,所以執(zhí)行成功。

5兆旬、使用索引字段作為條件并且不加入limit進(jìn)行更新

mysql> update users set status=1 where phone_num='13800138000';
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1  Changed: 0  Warnings: 0

操作成功假抄,雖然沒有加入limit限制,但是條件字段為索引字段,所以執(zhí)行成功宿饱。

安全模式DELETE操作實(shí)例

1熏瞄、無where條件的delete

mysql> delete from users;
ERROR 1175 (HY000): You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column

操作失敗,沒有where條件谬以,直接不行强饮。

2、非索引鍵進(jìn)行條件刪除

mysql> delete from users where reg_time='2018-06-28 17:35:37';
ERROR 1175 (HY000): You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column

操作失敗为黎,因?yàn)閞eg_time字段不是索引鍵邮丰。

3、非索引鍵作為條件并且加入limit進(jìn)行刪除

mysql> delete from users where reg_time='2018-06-28 17:35:37' limit 1;
Query OK, 1 row affected (0.00 sec)

操作成功碍舍,即使不是索引鍵柠座,因?yàn)榧尤肓薼imit邑雅。

4片橡、使用索引鍵并且不加limit限制進(jìn)行刪除。

mysql> delete from users where user_id=100000;
Query OK, 1 row affected (0.01 sec)

操作成功淮野,因?yàn)閡ser_id是索引鍵捧书。

5、加入limit但是不使用where條件刪除骤星。

mysql> delete from users 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

操作失敗经瓷,因?yàn)闆]有加入where檢索條件。

總結(jié)

如果設(shè)置了sql_safe_updates=1洞难,那么update語句必須滿足如下條件之一才能執(zhí)行成功
1)使用where子句,并且where子句中列必須為prefix索引列
2)使用limit
3)同時使用where子句和limit(此時where子句中列可以不是索引列)

delete語句必須滿足如下條件之一才能執(zhí)行成功
1)使用where子句,并且where子句中列必須為prefix索引列
2)同時使用where子句和limit(此時where子句中列可以不是索引列)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末舆吮,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子队贱,更是在濱河造成了極大的恐慌色冀,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件柱嫌,死亡現(xiàn)場離奇詭異锋恬,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)编丘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進(jìn)店門与学,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人嘉抓,你說我怎么就攤上這事索守。” “怎么了抑片?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵卵佛,是天一觀的道長。 經(jīng)常有香客問我,道長级遭,這世上最難降的妖魔是什么望拖? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮挫鸽,結(jié)果婚禮上说敏,老公的妹妹穿的比我還像新娘。我一直安慰自己丢郊,他們只是感情好盔沫,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著枫匾,像睡著了一般架诞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上干茉,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天谴忧,我揣著相機(jī)與錄音,去河邊找鬼角虫。 笑死沾谓,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的戳鹅。 我是一名探鬼主播均驶,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼枫虏!你這毒婦竟也來了妇穴?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤隶债,失蹤者是張志新(化名)和其女友劉穎腾它,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體燃异,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡携狭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了回俐。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逛腿。...
    茶點(diǎn)故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖仅颇,靈堂內(nèi)的尸體忽然破棺而出单默,到底是詐尸還是另有隱情,我是刑警寧澤忘瓦,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布搁廓,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏境蜕。R本人自食惡果不足惜蝙场,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望粱年。 院中可真熱鬧售滤,春花似錦、人聲如沸台诗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拉队。三九已至弊知,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間粱快,已是汗流浹背秩彤。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留皆尔,地道東北人呐舔。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓币励,卻偏偏與公主長得像慷蠕,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子食呻,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評論 2 355

推薦閱讀更多精彩內(nèi)容