MySQL binlog_row_image不同取值影响查询结果

介绍一个前提,对于一个事务内,DML是当前读,而且DML所做的更新,对本事务也是可见的。
例如,假设sam表只有一行数据是col1=1,当全表update后,虽然事务还未提交,而且即使在RR级别下,SQL1建立了一致性视图,但经过SQL2更新后,SQL3是能够看到自身更新的数据,这是因为SQL2更新后,所有数据行的trx_id都变为当前事务的trx_id,自然是可见的。
也可以这样理解,我自己做的操作,要是都不能看见,那不是见鬼了?

begin;
select * from sam where col1=1;   --SQL1
update sam set col1=1;            --SQL2
select * from sam where col1=1;   --SQL3

其实,还真有“鬼”。一起来看看恐怖片吧。
1.自己更新的数据,竟然看不见?
本例子基于以下环境和数据:

mysql> show variables like 'transaction_isolation';
+-----------------------+-----------------+
| Variable_name         | Value           |
+-----------------------+-----------------+
| transaction_isolation | REPEATABLE-READ |
+-----------------------+-----------------+
1 row in set (0.01 sec)

mysql> show variables like 'binlog_row_image';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| binlog_row_image | FULL  |
+------------------+-------+
1 row in set (0.00 sec)

mysql> select * from sam.sam;
+----+------+------+
| id | col1 | col2 |

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值