在MySQL中阻止UPDATE, DELETE 语句的执行,在没有添加WHERE条件

如果在生产环境中使用UPDATE,DELETE语句操作数据,此时如果忘记携带本应该添加的WHERE条件,后果可能不堪设想。在正常的业务情况,也不会更新或者删除所有的记录

1. 阻止update设置(sql_safe_updates

sql_safe_updates这个MySQL自带的参数就可以完美的解决我们的问题,并且该参数是可以在线变更的哦~当该参数开启的情况下,你必须要在UPDATE语句后携带WHERE条件,否则就会报出ERROR。。

# sql_safe_updates=0,即未开启
root@127.0.0.1 : test 07:58:34> set sql_safe_updates=0;
Query OK, 0 rows affected (0.00 sec)

root@127.0.0.1 : test 07:58:43> show variables like 'sql_safe_updates'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | sql_safe_updates | OFF | +------------------+-------+ 1 row in set (0.00 sec)  # sql_safe_updates=1,即开启 root@127.0.0.1 : test 08:00:00> set sql_safe_updates=1; Query OK, 0 rows affected (0.00 sec) root@127.0.0.1 : test 08:00:11> show variables like 'sql_safe_updates'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | sql_safe_updates | ON | +------------------+-------+ 1 row in set (0.00 sec)  root@127.0.0.1 : test 08:00:27> update t set aaa='aaa'; 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语句不携带WHERE条件将会爆出一个错误。


2. 阻止delete设置

直接限制mysql删除
启动MySQL的时候加上参数 -U
-U, --safe-updates  Only allow UPDATE and DELETE that uses keys.
他的作用是防止执行delete的时候没带有条件语句,如果没加上where则语句不执行。



  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL语句添加传参的值,可以使用参数化查询的方式。参数化查询可以避免SQL注入等安全问题,同时也更加方便灵活。 具体使用方法是在SQL语句使用占位符(通常是`?`)表示参数,然后在执行SQL语句时将实际的参数值传递给占位符。在MySQL,可以使用预处理语句来实现参数化查询。 例如,假设您要查询表名为`students``name`列为`Tom`的行的信息,可以使用以下代码: ``` -- 创建预处理语句 PREPARE stmt FROM 'SELECT * FROM students WHERE name=?'; -- 绑定参数并执行语句 SET @name = 'Tom'; EXECUTE stmt USING @name; ``` 上面的代码,`PREPARE`语句用来创建一个预处理语句,其的占位符`?`表示一个参数。`SET`语句用来将实际的参数值赋给变量`@name`。最后,`EXECUTE`语句用来执行预处理语句,并使用`USING`子句将变量`@name`绑定到占位符`?`上。 注意,使用预处理语句时需要注意以下几点: 1. 创建预处理语句时,可以使用任意的SQL语句,包括SELECT、INSERT、UPDATEDELETE语句。 2. 参数化查询可以避免SQL注入等安全问题,同时也更加方便灵活。 3. 在绑定参数时,需要使用变量来保存参数值。变量名以`@`开头。 4. 在执行预处理语句时,需要使用`EXECUTE`语句,并使用`USING`子句将变量绑定到占位符上。 5. 执行完预处理语句后,需要使用`DEALLOCATE PREPARE`语句来释放资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值