在mysql指令加上選項-U後,當發出沒有WHERE或LIMIT關鍵字的UPDATE或DELETE時,MySQL程式就會拒絕執行。那麼,我們基于MySQL提供的這項設定,就可以輕松實作如何最大程度防止人為誤操作MySQL資料庫了。什麼?你不信?不信我們就從MySQL的幫助說明說起,一起來看看如何基于MySQL的-u選項實作如何最大程度防止人為誤操作MySQL資料庫。
MySQL幫助說明
[root@binghe~]# mysql --help|grep dummy
-U, --i-am-a-dummy Synonym for option --safe-updates, -U.
i-am-a-dummy FALSE
在mysql指令加上選項-U後,當發出沒有WHERE或LIMIT關鍵字的UPDATE或DELETE時,MySQL程式就會拒絕執行。
指定-U登入測試
[root@binghe~]# mysql -uroot -proot -S /data/3306/mysql.sock -U
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 14
Server version: 5.7.24-log MySQL Community Server (GPL)
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> delete from oldboy.student;
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> quit
Bye
提示:不加條件無法删除,目的達到。
指定别名
我們可以将操作MySQL的指令做成别名,防止他人和DBA誤操作資料庫,将操作MySQL的指令做成别名也非常簡單,這裡,我們直接上示例了,如下所示。
[root@binghe~]# alias mysql='mysql -U'
[root@binghe~]# mysql -uroot -poldboy123 -S /data/3306/mysql.sock
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 15
Server version: 5.7.24-log MySQL Community Server (GPL)
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> delete from oldboy.student;
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 oldboy.student where Sno=5;
Query OK, 1 row affected (0.02 sec)
mysql> quit
Bye
在指令行會話設定alias mysql='mysql -U'之後,隻能在目前會話有效,關閉目前連接配接伺服器的指令行之後,會話失效,則别名設定也會随之失效。如果想關閉連接配接伺服器的會話終端,别名設定仍然有效,或者多個會話都能夠使用這個别名來操作資料庫,則我們可以将設定别名的指令添加到/etc/profile系統環境變量中,如下所示。
[root@binghe~]# echo "alias mysql='mysql -U'" >>/etc/profile
[root@binghe~]# . /etc/profile
[root@binghe~]# tail -1 /etc/profile
alias mysql='mysql -U'
這樣,當我們退出目前連接配接伺服器的會話終端,MySQL的别名設定依然有效,每次連接配接伺服器時,不必在目前會話中重新設定MySQL的指令别名,直接使用即可。
總結
在mysql指令加上選項-U後,當發出沒有WHERE或LIMIT關鍵字的UPDATE或DELETE時,MySQL程式拒絕執行。
重磅福利
關注「 冰河技術 」微信公衆号,背景回複 “設計模式” 關鍵字領取《深入淺出Java 23種設計模式》PDF文檔。回複“Java8”關鍵字領取《Java8新特性教程》PDF文檔。回複“限流”關鍵字擷取《億級流量下的分布式限流解決方案》PDF文檔,三本PDF均是由冰河原創并整理的超硬核教程,面試必備!!