事务
通常是默认开启事务的,所以不会回滚
事务保证了数据的一致性
- 要么都成功
- 要么都失败
对于没有开启自动提交的数据,是可以回滚的,一旦提交了之后,就不可以回滚,体现了MySQL的持久性
自动提交:@@autocommit=1;
手动提交:commit;
回滚:rollback;
开启事务的两种方式
- begin;
- start transaction;
事务的四大特征:
-
A 原子性:事务是最小的单位,不可以在分割。
-
C 一致性:事务要求,同一事务中的sql语句,必须保证同时成功或者同时失败。
-
I 隔离性:事务1和事务2之间是具有隔离性的。
- D 持久性:事务一旦结束(commit,rollback),就不可以返回。事务开启:
修改默认提交
- 1.set autocommit=0;
- 2. begin;
- 3. start transaction;
事务手动回滚:rollback;
事务的隔离性
事务的隔离性越高,则性能越差,系统默认的隔离级别是REPEATABLE READ
查看系统隔离性
select @@global.transaction_isolation;
查看会话隔离性
select @@transaction_isolation;
修改系统隔离性
set global transaction isolation level read committed;
1:read uncommitted
会出现脏读现象,即可以读到还未被提交的事务,如果未被提交的事务rollback,会发生不可预料的事情,应当避免发生脏读的发生
2:read committed
会出现不可重复读现象,即事务b对于事务a的update语句提交之后与修改之前都进行读取,导致读取的数据不一致
3:repeatable read
会出现幻读现象,事务B前后两次读取同一个范围的数据,在事务B两次读取的过程中事务A新增了数据,导致事务B后一次读取到前一次查询没有看到的行。
幻读和不可重复读有些类似,但是幻读强调的是集合的增减,而不是单条数据的更新
4:serializable
会出现超时的情况,当事务a开启并且还没有commit的时候,如果需要insert,这会造成等待,如果时间久,则可以失败,事务一个接一个执行
标签:回滚,transaction,隔离,事务,提交,MySQL,读取 From: https://www.cnblogs.com/happy12123/p/16837366.html