MySQL-事务

数据库事务是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。

1.事务的ACID特性

1.1原子性(atomicity)

事务具有原子不可分割的特性,要么一起执行,要么都不执行。

1.2一致性(consistency)

在事务开始和事务结束是,数据都保持一致。

1.2隔离性(isolation)

在事务开始和结束过程中,事务保持着一定的隔离特性,保证事务不受外部并发数据操作的影响。

1.4持久性(durability)

事务完成后,数据将会被持久化到数据库中。

2.事务的状态

提交:【commit】        回滚【rollback】

begin;                --开启事务
update account set abalance=abalance-2000 where aid=1;
update account set abalance=abalance+2000 where aid=2;
commit;                --提交
--或者
rollback;              --回滚


--还可以设置打点事务,即再保存点之前的会提交,保存点之后的会回滚
start transaction;
update account set abalance=abalance-1000 where aid=1;
savepoint A;                                                
update account set abalance=abalance-2000 where aid=1;
update account set abalance=abalance+2000 where aid=2;
rollback to A;

 3.事务隔离级别

当两个并发事务同时访问数据库表相同行是,可能会出现幻读、不可重复读取、脏读等问题,因此定义了事务的隔离级别来处理这些问题。

脏读不可重复读幻读
Read uncommitted

Read committed

×
Repeatable read×
Serializable×××

3.1设置事务的隔离级别

--设置read uncommitted级别:
set session transaction isolation level read uncommitted;

--设置read committed级别:
set session transaction isolation level read committed;

--设置repeatable read级别:
set session transaction isolation level repeatable read;

--设置serializable级别:
set session transaction isolation level serializable;

3.2脏读

事务A读取到事务B为提交的数据。脏数据指的是未提交的数据。

事务A【事务A读取到的8000就是脏数据】事务B
READ UNCOMMITTED;READ UNCOMMITTED;
select * from account ;-- 5000select * from account;--5000
begin;
update account set balance=8000 where accid=1;
select * from account ;-- 8000
rollback

3.3不可重复读

一个事务先后读取同一条记录,二事务在两次读取之间改数据被其他事务所修改,则两次读取的数据不同,即不可重复读。

事务A事务B
READ COMMITTED;READ COMMITTED;
select * from account ;-- 5000select * from account;--5000
begin
update account set balance=balance+3000 where accid=1;
COMMIT;
begin;
update account set balance=balance+3000 where accid=1;
COMMIT
select * from account;-- 11000??select * from account;-- 11000??

3.4幻读

一个事务按相同的查询条件重新读读取以前检索过的数据,却发现其他事务插入了满足其查询条件的新数据,这种现象就称为幻读。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值