天天看點

【開發經驗】mysql有效防止删庫跑路!

安全模式設定

測試

1.無where的update和delete

2、非索引鍵的delete

3.索引鍵的delete

總結

大家肯定聽說過,有些開發者由于個人失誤,在delete或者update語句的時候沒有添加where語句,導緻整個表資料錯亂。

mysql安全模式:mysql發現delete、update語句沒有添加where或者limit條件時會報錯。整個sql将無法執行,有效防止了誤删表的情況。

在mysql中通過如下指令檢視狀态:

【開發經驗】mysql有效防止删庫跑路!

預設是OFF狀态,将狀态設定為ON即可:

​<code>​set sql_safe_updates=1;​</code>​ //打開

​<code>​set sql_safe_updates=0;​</code>​ //關閉

設定為ON之後

update語句:where條件中列(column)沒有索引可用且無limit限制時會拒絕更新。where條件為常量且無limit限制時會拒絕更新。

delete語句: ①where條件為常量,②或where條件為空,③或where條件中 列(column)沒有索引可用且無limit限制時拒絕删除。

打開安全模式進行測試

​<code>​delete from t_user​</code>​

​<code>​update t_user set name='123'​</code>​

​<code>​delete from t_user where name='123'​</code>​

如果delete的where條件不是索引鍵,則必須要添加limit才可以。

​<code>​delete from t_user where name='123' limit 1​</code>​

​<code>​delete from t_user where group_id='123'​</code>​

如果設定了​<code>​sql_safe_updates=1​</code>​,那麼​<code>​update​</code>​語句必須滿足如下條件之一才能執行成功

使用where子句,并且where子句中列必須為prefix索引列

使用limit

同時使用where子句和limit(此時where子句中列可以不是索引列)

​<code>​delete​</code>​語句必須滿足如下條件之一才能執行成功

一才能執行成功。