对数据库事务的理解

首先说明下事务的四种隔离级别:读未提交、读已提交、可重复读、可串行化.

而且,在事务的并发操作中,可能出现脏读、不可重复读、幻读等.

读未提交:一个事务可以读取另一个事务没有提交的数据(脏读).

读已提交:一个事务只能读取到另一个事务提交的数据(可以解决脏读,但是一个事务中出现了更新操作,会导致数据不可重复读)

可重复读:开始事务后,不再允许修改数据(可以解决不可重复读的问题,但是可能出现幻读,比如说新增一条数据).

可串行化:事务串行化执行,可以避免脏读、不可重读读和幻读.

隔离级别的设置只对当前连接有效,对于使用MYSQL命令窗口而言,一个窗口就相当于一个连接,当前窗口设置的隔离级别只对当前窗口中的事务有效,对于JDBC操作数据库来说,一个Connection对象相当与一个连接,而对于Connection对象设置的隔离级别只对该Connection对象有效,与其他连接Connection对象无关

下面是我在 MySQL 数据库上的测试过程:

1.新开一个窗口,设置事务的隔离级别,然后在另一个窗口中查看,发现另一个窗口的事务隔离级别还是默认值.

SELECT @@tx_isolation;

set session transaction isolation level serializable;

start transaction;

insert into test values(1, ‘pp2’);

commit;

select * from test;

2.插入一条数据前开启事务,但是不提交,在另一个窗口中也插入一条数据,发现数据能插入进去,但是如果执行查询语句的话,则会被阻塞.

原因是和 MySQL 的底层存储结构有关,当事务操作的数据部分重叠时才会阻塞,如果不重叠则不会被阻塞.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值