MySQL隔离级别(幻读)

Mysql 事务的基本了解

ACID
1:事务的概念
什么是事务呢?事务是指单个逻辑单元完成一些列操作,它要么全部执行成功,要么就失败。事务处理可确保只有事务单元的操作。否则就不会拥有永久面向数据的更新资源,一个逻辑工作单元要想成为事务,那么他就必须要拥有事务的特性。

2:事务的用途
事务主要处理大量操作且数据复杂度比较高。这里举一个生活中常见例子,比如银行转账等。
3:ACID的特性
1:原子性
一个事务中的所有操作,他必须要具有原子性,在这个事务的执行过程中,它要么全部执行成功,要么就失败。而不会停留在某个环节。事务在执行过程中,他会被rollback到事务的执行状态。
2:一致性
事务在操作前后,数据库的完整都不会进行破坏。
3:隔离性
同一时间,只是允许一个事务对一条的进行操作。不同事务之间的操作是互不受影响的。
4:持久性
在事务操作完成后,对物理层面的影响是永久的,事务commit后,它会把所有的操作更新都会保存到数据库中的。且不能进行rollback。

事物隔离级别
读未提交(Read Uncommitted):即使一个事务的更新语句没有提交,但是别的事务可以读到这个改变。会导致以上几种异常情况都可能出现,极易出错,没有安全性可言,基本不会使用。
读已提交(Read Committed):一个事务只能看到其他事务的已经提交的更新,看不到未提交的更新,这是大多数数据库的默认隔离级别,如Oracle,Sqlserver。
可重复读(Repeatable Read):一个事务中进行两次或多次相同的数据库读操作,得到的结果是一样的。这是Mysql数据库的默认隔离级别。
串行化(Serializable):事务执行的时候不允许别的事务并发执行,而是完全串行化的读,只要存在读就禁止写,但可以同时读,消除了幻读。这是事务隔离的最高级别,虽然最安全,但是效率太低,一般不会用。

在这里插入图片描述
而MySQL的隔离级别为可重复读。

事务的实现方式

原子性 持久性 一致性都是通过数据库的redo log(重做日志,用来保证原子性和持久性)和undo log(回滚日志,事务的一致性)去完成的。而事物的隔离性则是通过mysql自身的锁机制去完成。

幻读

我们这里先随便创建一个表

CREATE TABLE t_demo(
    id int(11) NOT NULL,
    d int(11) DEFAULT NULL,
    d_1 int(11) DEFAULT NULL,
    PRIMARY KEY (`id`),
    KEY `d_1` (`d_1`)
);
insert into t_demo values(0,0,0),(1,1,1),
(2,2,2),(3,3,3),(4,4,4),(5,5,5);

比如:

  sqlselect * from name where id = 5 for update#提交
  commit;

然而我们执行这个语句后,就问题来了
当我们这个事务提交后,是锁住id为5的记录,还是锁住了这个表的数据呢?
不妨,我们来测试一下。
假如我们自定义id为5的,当只是锁住id为5的记录

select * from test where id = 5 for update;

#结果555update  t_demo set d_1 = 5 where id = 0;  


#结果
(0,0,5) (5,5,5)

insert into t_demo VALUES(6,6,5);

select * from t_demo where d_1=5 for update;

(0,0,5)(5,5,5)(6,6,5)


当事务进行操作的时候,我们上面查询的是id为5的数据。当我们使用锁定读的时候看一看到其他的数据。因此这一情况是幻读。

解决幻读的方案,我们可以设置事务的自动提交;

#首先先查看事物的隔离级别
select @@tx_isolation;
#然后设置自动提交
set autocommit;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值