1、MySQL 8.0 事务定义和基本操作
2、MySQL 8.0 事务的四大特性:A、C、I、D
事务的隔离级别包括:(isolation level)
1.读未提交的
read
2.读已提交的
read
3.可以重复读
repeatable
4.串行化
serializable
隔离级别操作:
1.查看数据库的隔离级别:
mysql 8.0 系统级别:
select
mysql 默认隔离级别:REPEATABLE-READ
mysql 8.0 会话级别:
select
mysql 5.x 系统级别:
select
mysql 5.x 会话级别:
select
2.修改事务隔离级别:(读未提交的 read uncommitted )
set
事务隔离级别:1.读未提交 read uncommitted,可能遇到的问题。
案例:
在数据库bank,数据表user中,插入两条数据:
insert
查看数据表user的数据:
select * from user;
小明在淘宝店买东西,转账:800元,
小明在成都,
淘宝店在广州。
小明在成都的终端,进行转账:
start transaction;
update user set money = money - 800 where name='小明';
update user set money = money + 800 where name='淘宝店';
查看数据:
select * from user;
小明告知淘宝店,自己在成都已转账,让淘宝店在广州查账。
淘宝店在广州的终端,查账后,发货。
淘宝店,在晚上消费1800元,发现钱不够了!
原来小明再淘宝店查完账后,在成都的终端,进行了撤回。
rollback
发现消费不够支付1800元的时候,淘宝店在广州的终端上查帐,发现钱少了小明的转账。
小明通过回滚,骗吃骗喝的现象出现,原因就是脏读。
如果两个不同地方都在进行操作,事务a开启后,a的数据可以被其他事务 b 读取到,这样就会出现脏读。
脏读:
一个事务读到了另外一个事务没有提交的数据,就叫做脏读。
实际开发中,不允许脏读出现。
事务隔离级别:1.读未提交 read uncommitted,可能遇到脏读问题。