MySQL安全模式:sql_safe_updates讲解
2023-09-11 14:18:55 时间
什么是安全模式
在mysql中,如果在update和delete没有加上where条件,数据将会全部修改。不只是初识mysql的开发者会遇到这个问题,工作有一定经验的工程师难免也会忘记写入where条件。为了避免失误造成的数据全部修改和删除,可开启mysql的安全模式。
安全模式的开启:
mysql> show variables like 'sql_safe_updates'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | sql_safe_updates | ON | +------------------+-------+ 1 row in set (0.00 sec)
安全模式的一般报这样的错误:
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
关闭安全模式:
mysql> set sql_safe_updates=1; Query OK, 0 rows affected (0.00 sec) mysql> show variables like 'sql_safe_updates'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | sql_safe_updates | ON | +------------------+-------+ 1 row in set (0.00 sec)
注意,如果生产环境中有必要设置安全模式,一下几点要明白:
如果设置了sql_safe_updates=1,那么update语句必须满足如下条件之一才能执行成功
1)使用where子句,并且where子句中列必须为prefix索引列
2)使用limit
3)同时使用where子句和limit(此时where子句中列可以不是索引列)
delete语句必须满足如下条件之一才能执行成功
1)使用where子句,并且where子句中列必须为prefix索引列
2)同时使用where子句和limit(此时where子句中列可以不是索引列)
相关文章
- 【MySQL高级】Mysql并发参数调整及常用SQL技巧
- SQL Server分组连接并去重类似Mysql的Group_Concat功能实现
- mysql 中常用的 sql 语句
- MySQL 查询库中所有表记录 & sql_mode=only_full_group_by
- MySQL 灵魂 16 问,你能撑到第几问?
- 【MySQL进阶-03】深入理解mysql的索引分类,覆盖索引,覆盖索引失效,回表,MRR
- Mysql备份工具Xtrabackup
- MySQL 之 Metadata Locking 研究
- sql server 小技巧(4) Sql server 排序时让空值排在最后
- ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
- MySQL数据库:SQL语句的执行过程
- 数据库原理及MySQL应用 | 数据表操作
- 【3.3】mysql链接服务器,Federated存储引擎实现远程表,相当于sql server的连接服务器
- 【转】mysql用sql实现split函数
- mysql创建计算列(5.7以后才有)
- MySQL崩溃恢复过程
- 【MySQL】count统计哪种更快