首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

一条 update 语句引起的事故,这回可以长长记性了

---- 过程 由于开发需要在生产环节中修复数据,需要执行120条SQL语句,需要将数据进行更新 于是开发连上了生产数据库,首先执行了第一条SQL update tablename set source_name...我赶紧登上服务器,查看了这段时间的binlog,发现了大量的update tablename set source_name=0的语句,利用binlog2sql进行了解析 ?...update tbl_name set (str_col="xxx" )= "yyy" 这样就语法错误了,那么只会是下面这样的形式, update tbl_name set str_col=("xxx...我们再研究下select形式这种语句会怎么样。..., 由于等号一边是int,另外一边是字符串,两边都转化为float进行比较,可以看我之前的一篇文章MySQL中隐式转换导致的查询结果错误案例分析'yyy'转化为浮点型为0,0和0比较恒等于1 mysql

63020

你对Redis的使用靠谱吗?Redis的性能高,吗?Redis可以保证原子性,吗?用Redis可以实现事务,吗?用Redis可以当队列,吗?Redis适合用来做什么?

然后跑一下压测,看看Redis的实际表现到底是怎样的。 Redis可以保证原子性,吗? 我们先定义一下什么是原子性: 一般编程语言这么定义:原子性是指一组操作在执行过程中,不受其他并发操作的干扰。...Redis事务和Lua Script都可以保证一组指令执行不受其他指令的打扰。比如上面的例子,用Lua Script实现,就可以正确运行。...这段逻辑是没法做到原子的——除非你自行实现了某种分布式事务的机制。而分布式事务的实现复杂度往往会超过Redis带来的好处。 用Redis可以实现事务,吗?...不是不可能,但要反复确认这样做的必要性。你是否具有专业的存储开发技能,你能投入多少精力在ACID上,你的公司能给你多少资源做开发测试,这些都需要仔细考虑。 用Redis可以当队列,吗?...Redis实现了一个List的数据结构。借助它,可以实现出队,入队的功能。实际上很多人早就熟练使用Redis做队列。比如Sidekiq就是使用Redis作为异步job队列的存储。然而,这样靠谱吗?

3.8K110
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    MYSQL 从performance_schema说起,但不止于PS ,sys库可以成为语句分析的AWS吗?(3)

    update sys.sys_config set value = 128 where variable = 'statement_truncate_len' ; 这里仅提两个针对我们系统性能分析中关于语句的分析中有用的两个配置项...,比如那些语句是最近的 TOP10 ,等等一些在传统数据库上可以做的事情,这里都可以做。...SUM_ROWS_EXAMINED,LAST_SEEN from statement_analyze.tmp_digests order by last_seen desc limit 2 \G 然后我们可以每一个小时分析一次语句的性能状态与上一个小时的变化...('overall', NULL, 'with_runtimes_in_95th_percentile'); 'with_runtimes_in_95th_percentile'); 通过定期分析可以将当前的一些语句的运行情况进行展示和分析...写到这里,其实基于上方的一些东西和选项,可以针对MYSQL 8 开始准备开发一个新的基于MYSQL的 语句分析多维度的 "AWS" 系统了,基础MYSQL 已经在sys 库已经给你搭建好了,

    86430

    MySQL的锁机制和加锁原理

    主键索引/唯一索引+当前读会加上Gap锁吗? 6.2.4通过范围查询是否会加上Gap锁 6.2.5 检索条件并不存在的当前读会加上Gap吗?...排它锁用法(X 锁 写锁): ​ 若事务T对数据对象A加上X锁,事务T可以读A也可以修改A,其他事务不能再对A加任何锁,直到T释放A上的锁。这保证了其他事务在T释放A上的锁之前不能再读取和修改A。...1.开始事务 begin;/begin work;/start transaction; (三者选一就可以) 2.查询出商品信息 select ... for update; 4.提交事务 commit...Gap锁 6.2.5 检索条件并不存在的当前读会加上Gap吗?...2.两个session的一条语句 ​ 这种情况需要我们了解数据的索引的检索顺序原理简单说下:普通索引上面保存了主键索引,当我们使用普通索引检索数据时,如果所需的信息不够,那么会继续遍历主键索引。 ​

    96820

    数据库两大必备神器:索引和锁底层原理是什么!

    一、索引 在之前,我对索引有以下的认知: 索引可以加快数据库的检索速度; 表经常进行INSERT/UPDATE/DELETE操作就不要建立索引了,换言之:索引会降低插入、删除、修改等维护任务的速度;...; 不支持范围查询; 5、InnoDB支持哈希索引吗?...因为这些锁数据库隐式帮我们加了: 对于UPDATE、DELETE、INSERT语句,InnoDB会自动给涉及数据集加排他锁(X); MyISAM在执行查询语句SELECT前,会自动给涉及的所有表加读锁,...我们使用悲观锁的话其实很简单(手动加行锁就行了): select * from xxxx for update 在select 语句后边加了 for update相当于加了排它锁(写锁),加了写锁以后,...现在我们大多数使用MySQL都是使用InnoDB,InnoDB支持行锁: 共享锁--读锁--S锁 排它锁--写锁--X锁 在默认的情况下,select是不加任何行锁的~事务可以通过以下语句显示给记录集加共享锁或排他锁

    1.8K40

    长文一次说完MySQL常用语句和命令等汇总

    事务的四个特征ACID 事务相关的语句只有:DML语句。(insert delete update) 假设所有的业务的都能使用一条DML语句搞定,还需要事务机制吗?...并且可以转换为只读表,提高检索效率。缺点:不支持事务。 InnoDB存储引擎 InnoDB存储引擎是mysql的缺省引擎。...要想保证以上的两条DML语句同时成功或者同时失败,那么就需要使用数据库的“事务机制”。 事务可以保证多个操作原子性,要么全成功,要么全失败。...假设所有的业务的都能使用一条DML语句搞定,还需要事务机制吗? 不需要事务。但实际情况不是这样的,通常一个“事儿(事务【业务】)”需要多条DML语句共同联合完成。...在数据库方面,查询一张表的时候有两种检索方式: 全表扫描 根据索引检索(效率很高) 索引为什么可以提高检索效率呢? 其实最根本的原理是缩小了扫描的范围。

    77720

    探究 | Elasticsearch不支持事务有什么好的弥补方案吗?

    1、问题 源自星球同学的提问:es如何与hive或mysql结合使用?es不支持事务有什么好的弥补方案吗?...隔离性:允许在一个事务中的操作语句会与其他事务的语句隔离开,比如事务A运行到第3行之后,第4行之前,此时事务B去查询checking余额时,它仍然能够看到在事务A中被减去的200元(账户钱不变),因为事务...Elasticsearch的底层技术是Lucene,Lucene是追求速度而非冗余的信息检索技术。Lucene具有完全不同的体系结构,可以提供极快的性能,但代价是更容易受到数据丢失的影响。...如果你的数据并不频繁的update操作,也没有事务性操作,那么完全可以用Elasticsearch替代其他存储。...核心操作: ES中只存储检索字段,方便快速检索、全文检索。 Mysql中存储全部字段,利用ACID事务特性。 通过关联字段建立关联,比如:news_id在ES和mysql中要有相同的值。

    3.6K31

    SQL必知必会总结4-第18到22章

    可以授予用户访问表的特定部分数据,而不是整个表的数据 更改数据格式和表示、视图可以返回和底层表的表示和格式不同的数据 笔记:视图本身不包含数据,使用的是从别处检索出来的数据。...利用事务处理,可以保证一组操作不会中途停止,要么完全执行,要么完全不执行,来维护数据库的完整性。 在MySQL中,一条SQL语句就是一个事务。...一个完整的业务需要大量的DML(insert、update、delete)语句来共同完成。只有DML数据操作语句才有事务。...但是实际中,我们需要在检索出来的行中前进或者后退一行甚至多行,这时候便可以使用游标。 游标是一个存储在DBMS服务器上的数据库存查询,它不是一条SELECT语句,而是被该语句检索出来的结果集。...触发器可以与特定表上INSERT、UPDATE、DELETE操作相关联。

    1.3K30

    关于 select for update,大抄们没讲清楚的东西

    我想这篇应该也不会从百度被检索过来吧,毕竟我没有把场景当标题、 场景是这样的,也很常见。...这对于我来说需要两条SQL语句才能解决,有些专业的SQL大佬应该是可以用一条解决吧,毕竟我不是专业写SQL的。...数据库明明有行锁,用来生锈吗? 网上更多的人就是千篇一律的答案:用 select ··· for update,然后拿出一坨的代码根本就没法看。也没个运行印证,估计自己都没去跑一下。...---- 最后经过我多番摸索得出结论: 1、需要打开事务、 2、需要用 for update 进入读写锁环境 3、需要所有需要互斥的任务都进入读写锁环境 就是说,所有相关事务都需要 for update...,否则就是可以查询的

    33110

    MySQL 教程下

    然而,视图的数据能否更新?答案视情况而定。通常,视图是可更新的(即,可以对它们使用 INSERT、UPDATE 和 DELETE)。更新一个视图将更新其基表(可以回忆一下,视图本身没有数据)。...游标(cursor)是一个存储在 MySQL 服务器上的数据库查询,它不是一条SELECT语句,而是被该语句检索出来的结果集。在存储了游标之后,应用程序可以根据需要滚动或浏览其中的数据。...触发器是 MySQL 响应以下任意语句而自动执行的一条 MySQL 语句(或位于 BEGIN 和 END 语句之间的一组语句): ❑ DELETE; ❑ INSERT; ❑ UPDATE。...如果 INSERT、UPDATE 或 DELETE 语句能够执行,则相关的触发器也能执行。 ❑ 应该用触发器来保证数据的一致性(大小写、格式等)。...如果一个简单的 WHERE 子句返回结果所花的时间太长,则可以断定其中使用的列(或几个列)就是需要索引的对象。 ❑ 你的SELECT语句中有一系列复杂的 OR 条件吗?

    1.1K10

    MySQL学习笔记:SQL分类

    UPDATE:修改表中的数据。DELETE:删除表中的数据。2.2 SELECTSELECT语句是DML中最常用的语句,用于从数据库中查询数据。...UPDATE语句的基本语法如下:UPDATE table_nameSET column1 = value1, column2 = value2, ......SELECT, INSERT, UPDATE, DELETE: 允许的操作。employees: 表的名称。4.4 管理用户和角色之间的关系可以将角色授予用户,这样用户就继承了角色的权限。...COMMIT;这将提交事务,使之前的所有更改成为永久性的。5.3 回滚事务如果在事务执行的过程中发生了错误,可以选择回滚事务,使数据库恢复到事务开始之前的状态。...ROLLBACK;这将回滚事务,撤销之前的所有更改。5.4 保存点保存点是事务中的一个标记,可以在稍后的时间回滚到该点。

    25910

    数据库的索引和锁到底是怎么回事

    本文力求简单讲清每个知识点,希望大家看完能有所收获 声明:如果没有说明具体的数据库和存储引擎,默认指的是MySQL中的InnoDB存储引擎 一、索引 在之前,我对索引有以下的认知: 索引可以加快数据库的检索速度...了解过索引的最左匹配原则 知道索引的分类:聚集索引和非聚集索引 Mysql支持Hash索引和B+树索引两种 看起来好像啥都知道,但面试让你说的时候可能就GG了: 使用索引为什么可以加快数据库的检索速度啊...1.2索引提高检索速度 索引做了些什么可以让我们查询加快速度呢? 其实就是将无序的数据变成有序(相对): ? 要找到id为8的记录简要步骤: ?...因为这些锁数据库隐式帮我们加了 对于 UPDATE、DELETE、INSERT语句,InnoDB会自动给涉及数据集加排他锁(X) MyISAM在执行查询语句 SELECT前,会自动给涉及的所有表加读锁,...现在我们大多数使用MySQL都是使用InnoDB,InnoDB支持行锁: 共享锁--读锁--S锁 排它锁--写锁--X锁 在默认的情况下, select是不加任何行锁的~事务可以通过以下语句显示给记录集加共享锁或排他锁

    1.1K30

    关于mysql的面试题都在这里了

    WHERE''检索一定范围内数据的操作中间,事务2在这个表中创建了(如[[INSERT]])了一行新数据,这条新数据正好满足事务1的“WHERE”子句。...但是innodb存储的并不是绝对的时间,而是与时间对应的数据库系统的版本号,每当一个事务开始的时候,innodb都会给这个事务分配一个递增的版本号,所以版本号也可以被认为是事务号.对于每一个”查询”语句...,innodb都会把这个查询语句的版本号同这个查询语句遇到的行的版本号进行对比,然后结合不同的事务隔离等级,来决定是否返回该行....面试官:binlog用过吗?...DDL和DML(除了数据查询语句)语句,并以事务的形式保存在磁盘中,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的。

    35720

    被面试官PUA了:创建索引时一定会锁表?

    索引主要是用于提高数据检索速度的一种机制,通过索引数据库可以快速定位到目标数据的位置,而不需要遍历整个数据集,它就像书籍的目录部分,有它的存在,可以大大加速查询的效率。...那么问题来了:在创建索引时一定会锁表吗? 如果你看的是网上的一些资料,或者是通过 chatgpt,那么很可能得到的结果是这样的“是的,创建索引时是会锁表的。”,但这个回答是不正确的,为什么呢?...UPDATE:用于更新表中已存在的数据行。 DELETE:用于删除表中的数据行。 SELECT:用于从表中检索数据。...Online DDL(Online Data Definition Language,在线数据定义语言)是指在数据库运行期间执行对表结构或其他数据库对象的更改操作,而不需要中断或阻塞其他正在进行的事务和查询...小结 在 MySQL 5.6 之前,创建索引时会锁表,但在 MySQL 5.6.7 之后,因为新增了 Online DDL 技术,所以此时在添加索引时,是可以和 DML 数据操作语言 INSERT、UPDATE

    51810

    MySQL入门学习笔记(下)

    将A账户的钱减去10000(update语句) 将B账户的钱加上10000(update语句) 这就是一个完整的业务逻辑。...只有DML语句才会有事务这一说,其它语句和事务无关!!! insert、delete、update 只有以上的三个语句和事务有关系,其它都没有关系。...假设所有的业务,只要一条DML语句就能完成,还有必要存在事务机制吗? 真是因为做某件事的时候,需要多条DML语句共同联合起来才能完成,所以需要事务的存在。...InnoDB存储引擎:提供一组用来记录事务性活动的日志文件 事务开启了: insert insert insert delete update update update 事务结束了!...bjpowernode>D:\bjpowernode.sql -uroot -p123456 可以导出指定的表吗?

    1.1K20

    被面试官PUA了:创建索引时一定会锁表?

    索引主要是用于提高数据检索速度的一种机制,通过索引数据库可以快速定位到目标数据的位置,而不需要遍历整个数据集,它就像书籍的目录部分,有它的存在,可以大大加速查询的效率。...那么问题来了:在创建索引时一定会锁表吗? 如果你看的是网上的一些资料,或者是通过 chatgpt,那么很可能得到的结果是这样的“是的,创建索引时是会锁表的。”,但这个回答是不正确的,为什么呢?...UPDATE:用于更新表中已存在的数据行。 DELETE:用于删除表中的数据行。 SELECT:用于从表中检索数据。...Online DDL(Online Data Definition Language,在线数据定义语言)是指在数据库运行期间执行对表结构或其他数据库对象的更改操作,而不需要中断或阻塞其他正在进行的事务和查询...小结 在 MySQL 5.6 之前,创建索引时会锁表,但在 MySQL 5.6.7 之后,因为新增了 Online DDL 技术,所以此时在添加索引时,是可以和 DML 数据操作语言 INSERT、UPDATE

    1.7K10

    这三道常见的面试题,你有被问过吗?

    这三道常见的面试题,你有被问过吗? MySQL查询字段区不区分大小写?...解决方案一 MySQL默认的字符检索策略:utf8_general_ci,表示不区分大小写。...优点:binlog中可以不记录执行的sql语句的上下文相关的信息,仅需要记录那一条记录被修改成什么了。 所以rowlevel的日志内容会非常清楚的记录下 每一行数据修改的细节。...比如一条update语句,修改多条记录,则binlog中每一条修改都会有记录,这样造成binlog日志量会很大,特别是当执行alter table之类的语句的时候,由于表结构修改,每条记录都发生改变,那么该表每一条记录都会记录到日志中...至于update或者delete等修改数据的语句,还是会记录所有行的变更。

    6210

    OB 运维 | 基于日志或 gv$sql_audit 分析 OB 异常重试 SQL

    查找 UPDATE 语句 在对应的服务器上 grep 此 SQL 语句的打印次数: 结果为 1 小时内执行了 505 次,判断针对该行数据的 UPDATE 行为可能存在异常。...查找错误位置 以 SQL 语句 和 ret= 作为条件进行检索,看是否存在相关错误码。 若 SQL 文本无法精准匹配,则只复制部分关键字。 可以看到 4012,6003 等超时相关错误码。...查询锁等待者事务信息 使用 sys 租户执行。 可以看到此处 session_id 与 gv$sql_audit 查询出来的是一致的(即,异常重试的 SQL 的会话)。...7其他错误码 通过如下几个错误码可以判断 SQL 超时原因(语句超时/事务超时/事务空闲超时): 系统变量 ob_query_timeout: 该变量控制着语句执行时间的上限,语句执行时间超过此值会给应用返回语句超时的错误...系统变量 ob_trx_idle_timeout: 该变量表示 session上一个事务处于的 IDLE 状态的最长时间,即长时间没有 DML 语句或结束该事务。超过该时间值后,事务会自动回滚。

    12410

    数据库两大神器【索引和锁】

    1.2索引提高检索速度 索引做了些什么可以让我们查询加快速度呢? 其实就是将无序的数据变成有序(相对): ? 要找到id为8的记录简要步骤: ?...因为这些锁数据库隐式帮我们加了 对于UPDATE、DELETE、INSERT语句,InnoDB会自动给涉及数据集加排他锁(X) MyISAM在执行查询语句SELECT前,会自动给涉及的所有表加读锁,在执行更新操作...---- Read uncommitted会出现的现象--->脏读:一个事务读取到另外一个事务未提交的数据 例子:A向B转账,A执行了转账语句,但A还没有提交事务,B读取数据,发现自己账户钱变多了!...我们使用悲观锁的话其实很简单(手动加行锁就行了): select * from xxxx for update 在select 语句后边加了 for update相当于加了排它锁(写锁),加了写锁以后...现在我们大多数使用MySQL都是使用InnoDB,InnoDB支持行锁: 共享锁--读锁--S锁 排它锁--写锁--X锁 在默认的情况下,select是不加任何行锁的~事务可以通过以下语句显示给记录集加共享锁或排他锁

    1.7K00
    领券