iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL中参数sql_safe_updates在生产环境怎么用
  • 298
分享到

MySQL中参数sql_safe_updates在生产环境怎么用

2024-04-02 19:04:59 298人浏览 安东尼
摘要

这篇文章主要介绍了Mysql中参数sql_safe_updates在生产环境怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前

这篇文章主要介绍了Mysql中参数sql_safe_updates在生产环境怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

前言

在应用 BUG或者 DBA误操作的情况下,会发生对全表进行更新:update delete 的情况。mysql提供 sql_safe_updates 来限制次操作。

set sql_safe_updates = 1;

设置之后,会限制update delete 中不带 where 条件的SQL 执行,较严格。会对已有线上环境带来不利影响。对新系统、应用做严格审核,可以确保不会发生全表更新的问题。

CREATE TABLE working.test01 (id INT NOT NULL AUTO_INCREMENT,NAME VARCHAR(20),age INT,gmt_created DATETIME,PRIMARY KEY(id));

 insert into test01(name,age,gmt_created) values('xiaowang',2,now());
 insert into test01(name,age,gmt_created) values('huahua',5,now()); 
 insert into test01(name,age,gmt_created) values('Gougou',9,now()); 
 insert into test01(name,age,gmt_created) values('heihei',12,now()); 
 insert into test01(name,age,gmt_created) values('baibai',134,now()); 

# 过滤字段上没有索引
update
update test01 set name = 'xiaoxiao' where age = 2 ;
ERROR 1175 (HY000): You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column
# 全表更新
update test01 set name = 'xiaoxiao';
ERROR 1175 (HY000): You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column
# 加入limit的更新
update test01 set name = 'xia' limit 1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

# 新增索引
create index idx_age on test01(age);

update test01 set name = 'xiaoxiao' where age = 2;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0

update test01 set name = 'hhh' where age = 9 limit 10;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

alter table test01 drop index idx_age;
create index idx_age_name on test01(age,name);


update test01 set age= 100 where name = 'hhh';
ERROR 1175 (HY000): You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column

update test01 set age= 100 where name = 'hhh' limit 10;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

由此,update 时,在没有 where 条件或者where 后不是索引字段时,必须使用 limit ;在有 where 条件时,为索引字段

最近在工作中又发现了一个问题,mysql sql_safe_updates 不支持子查询的更新。

考虑到开发人员有时候不小心误更新数据,要求线上库的 MySQL 实例都设置 sql_safe_updates=1 来避免没有索引的 update、delete。

结果有一天开发发现下面的一个SQL 没法正确执行:

update t1 set col2=1 where key1 in (select col2 from t2 where key2='ABcD');

错误如下:

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条件进行更新。搜索了下发现,的确不行。及时 key1 和key2 分别是 t1、t2 的索引[我换成主键都不行] 。说明是不支持子查询的update。

google 了一下发现人家也问过这个问题。。

Http://stackoverflow.com/questions/24314830/query-not-getting-executed-if-supplied-a-nested-sub-query

最后解决方法:

1)修改 session 级别的参数: set sql_safe_updates=0; 执行 update 操作。退出终端。

2)程序处理:先 select col2 from t2 where key2='ABcD' 获取数据,然后循环处理结果,并用 update t1 set col2=1 where key1=? 来批量更新过。建议还是用程序处理,临时修改变量不是长久之计。

感谢你能够认真阅读完这篇文章,希望小编分享的“MySQL中参数sql_safe_updates在生产环境怎么用”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网数据库频道,更多相关知识等着你来学习!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL中参数sql_safe_updates在生产环境怎么用

本文链接: https://www.lsjlt.com/news/57365.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL中参数sql_safe_updates在生产环境怎么用
    这篇文章主要介绍了MySQL中参数sql_safe_updates在生产环境怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前...
    99+
    2024-04-02
  • JVM中生产环境参数实例及分析
    今天就跟大家聊聊有关JVM中生产环境参数实例及分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。java application项目(非web项目)改进前:-Xms128m ...
    99+
    2023-06-17
  • 怎么在生产环境运行Elasticsearch
    这篇文章主要讲解了“怎么在生产环境运行Elasticsearch”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么在生产环境运行Elasticsearch”吧!基础知识:集群,节点,索引和分...
    99+
    2023-06-16
  • Java枚举类在生产环境中怎么使用
    这篇文章主要讲解了“Java枚举类在生产环境中怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java枚举类在生产环境中怎么使用”吧!使用大体分为确定业务场景状态、定义枚举类、自定义查...
    99+
    2023-06-29
  • 怎么在生产环境检查Vue应用程序
    这篇文章将为大家详细讲解有关怎么在生产环境检查Vue应用程序,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。触发 Prop 值并更新除了弄清楚如何检查Vue内部变量外,我们...
    99+
    2024-04-02
  • AmazonAurora是否适合在生产环境中使用
    是的,Amazon Aurora 是亚马逊提供的一种高性能、可扩展性强的关系型数据库服务,基于 MySQL 和 PostgreSQL...
    99+
    2024-04-09
    AmazonAurora
  • Vue生产环境怎么调试
    本文小编为大家详细介绍“Vue生产环境怎么调试”,内容详细,步骤清晰,细节处理妥当,希望这篇“Vue生产环境怎么调试”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。前言vue 生产环境默认是无法启用vue devt...
    99+
    2023-06-30
  • vue中控制mock在开发环境使用,在生产环境禁用方式
    目录vue控制mock在开发环境使用,在生产环境禁用说下原因解决方案vue中使用mock(常用方式) 前期准备安装axios和mock.js插件在main.js中引入编写m...
    99+
    2024-04-02
  • golang函数性能优化在生产环境中的应用
    go 函数性能优化应用针对生产环境,本文介绍了以下 4 种优化 go 函数性能的技术:并发编程(使用 goroutines)缓存频繁访问的数据编写简洁代码(避免不必要的循环、条件检查和函...
    99+
    2024-04-26
    优化 golang 重构代码
  • 怎么理解MySQL中的sql_safe_updates生效点
    本篇内容主要讲解“怎么理解MySQL中的sql_safe_updates生效点”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么理解MySQL中的sql_saf...
    99+
    2024-04-02
  • 是否可以在生产环境中使用Alma Linux
    是的,您可以在生产环境中使用Alma Linux。Alma Linux是一个由社区支持的开源Linux发行版,旨在为CentOS用户...
    99+
    2024-04-02
  • Vue中怎么切换生产和开发环境
    Vue中怎么切换生产和开发环境,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、生产环境,开发环境切换开发环境:开发环境就是在 /config/index.js下配置pro...
    99+
    2023-06-20
  • 怎样在生产环境下实现每天自动备份mysql数据库
    这篇文章给大家介绍怎样在生产环境下实现每天自动备份mysql数据库,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1、描述    我相信很多朋友在...
    99+
    2024-04-02
  • 免安装原生产环境的MySQL是什么
    这篇文章主要介绍“免安装原生产环境的MySQL是什么”,在日常操作中,相信很多人在免安装原生产环境的MySQL是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”免安装原生产...
    99+
    2024-04-02
  • 生产环境使用 pt-table-checksum 检查MySQL数据一致性
    公司数据中心从托管机房迁移到阿里云,需要对mysql迁移(Replication)后的数据一致性进行校验,但又不能对生产环境使用造成影响,pt-table-checksum 成为了绝佳也是唯一的检查工具...
    99+
    2024-04-02
  • springboot生产环境热部署怎么实现
    在Spring Boot中,可以通过使用Spring Boot DevTools库来实现生产环境的热部署。下面是一些实现的步骤: ...
    99+
    2023-10-25
    springboot
  • 怎么使用Spring注解@Profile实现开发环境/测试环境/生产环境切换
    这篇文章主要介绍了怎么使用Spring注解@Profile实现开发环境/测试环境/生产环境切换的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用Spring注解@Profile实现开发环境/测试环境/生产环...
    99+
    2023-07-06
  • 详解Java枚举类在生产环境中的使用方式
    目录前言使用1、确定业务场景状态2、定义枚举类3、自定义查询方法4、测试效果总结前言   Java枚举在项目中使用非常普遍,许多人在做项目时,一定会遇到要维护某些...
    99+
    2024-04-02
  • java并发使用CountDownLatch在生产环境翻车剖析
    目录前言需求背景具体实现解决方案总结前言 大家好,我是小郭,之前分享了CountDownLatch的使用,我们知道用来控制并发流程的同步工具,主要的作用是为了等待多个线程同时完成任务...
    99+
    2022-11-13
    java并发CountDownLatch java并发
  • mongodb分片集群生产环境怎么配置
    要配置MongoDB分片集群的生产环境,您需要执行以下步骤:1. 设计分片策略:确定如何划分数据片段和选择分片键。分片键是用于将数据...
    99+
    2023-08-23
    mongodb
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作