数据库之事务

1.事务的概念

事务是一组SQL语句组成的逻辑处理单元,由事务开始与事务结束之间执行的全部数据库操作组成

2.事务的ACID特性与其两种状态

2—1ACID特性

(1)原子性:事务具有原子不可分割的特性,要不一起执行,要不都不进行执行;

(2)一致性:在事务开始时与事务结束时,数据都保持一致的状态;

(3)隔离性:在事务开始与结束过程中,事务都保持着一定的隔离性,保证事务不受到外部并发数据操作的影响;

(4)持久性:事务完成后,数据将会被持久化保存在数据库中。

2—2事务的两种状态

(1)提交—commit:顾名思义,就是在数据处理好后提交给数据库,持久化的存在数据库当中。

(2)回滚—rollback:就跟下象棋中的悔棋一样,返回上一步,但在commit之后不能进行回滚操作。
注意点来喽!!!虽说,提交后不能进行回滚操作,但是,我们可以设置一个——打点事务,即为保存点之前的会进行提交,保存之后的会进行回滚。

太干了,来个例子润润!

假设A向B转账,每次转账无论成功与否,资本均会扣除我们10元的手续费,现在A大款向B转账1000。

START TRANSACTION ;
UPDATE account SET abalance=abalance-10 WHERE aid=1;
SAVEPOINT A;
UPDATE account SET abalance=abalance-1000 WHERE aid=1;
UPDATE account SET abalance=abalance+1000 WHERE aid=2;
ROLLBACK TO A;

3.事务隔离级别

3—1 事务隔离级别:一个事务对数据库修改与并行的另一个事务的隔离程度。

3—2 两个并发事务同时访问数据库表相同的行时,可能存在以下三个问题:

         1. 脏读 2.不可重复读 3.幻读

为了处理这些问题,SQL标准定义了以下几种事务隔离级别

脏读:事务A读取到事务B未提交的数据。 比如账号1的账号金额是5000,此时事务B,将1账号的金额更改为8000,但是还未提交事务,此 时事务A,查看1账号的金额,看到8000,然后事务B对操作做了回滚。事务A就读取到脏数据。 如果将事务的隔离级别提高到Read uncommitted,便不会产生以上情况。

不可重复读:事务A查看1账号的金额是2000,此时想再账号上减2000.但是还没操作的时候,事务B,将 数据更改了,并再事务A之前提交了事务。此时事务A再次读取该数据的时候,已经改变了。 事务的隔离级别提高到Read committed时,避免了脏读,但是会造成不可重复度。大多数数据库 的默认级别就是ReadCommited.可以将事务的隔离级别提高到Repeatable read。也就是事务A读取了 数据,再未提交事务的时候,事务B不能对数据进行修改。

幻读:事务A查看第一次查看记录的时候为80。此时,事务B对该记录做了更改,事务A再看的时候,发 现不是80,事务A就像出现环境一样。将隔离级别提高到Serializable就可以避免幻读。 

 查看mysql的事务隔离级别

SELECT @@transaction_isolation; 【 select @@tx_isolation;】

设置mysql的事务隔离级别 

 

SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值