数据库——事务

事务的四大特征(ACID)

原子性

一致性:事务前后,数据库的完整性约束没有被破坏

隔离性:一个事务的影响在提交前对其他事务不可见

持久性:事务一旦提交,结果是永久性的;即使发生故障,也能够恢复

 

事务隔离性和原子性

  • 事务隔离级别:

1.可串行化

2.可重复读:只允许读取已提交数据,而且一个事务两次读取一个数据项期间,其他事务不得更新该数据

3.已提交读:只允许读取已提交数据,大多数数据库默认隔离级别

4.未提交读:允许读取已提交数据,InnoDB默认隔离级别,并且使用next-key lock避免幻读

均不允许脏写:如果一个数据项已经被一个尚未提交的事务写入,则不允许对数据项执行写操作

 

隔离性级别的实现:

时间戳

多版本

快照隔离

 

 

事务的实现

redo

redo存放在重做日志文件中

每个事务都有LSN(日志序列号)

WAL(预写日志方式):事务提交时,先将日志缓冲写入磁盘,再写数据

 

undo

undo存放在共享表空间的undo段

 

 

事务控制语句

默认事务自动提交(执行SQL语句后)

开始一个事务,需要用BEGIN, START TRANSACTION, SET AUTOCOMIT=0禁用当前会话的自动提交

 

 

隐式提交的SQL语句

  • 执行完下面的语句,会有一个隐式COMMIT操作:

1.DDL语句,对数据库内部的对象(数据库,表,所有)进行创建、删除、修改等操作

2.修改架构的操作(用户,授权)

3.管理语句

此外,TRUNCATE TABLE不能被回滚

 

 

 

分布式事务

使用分布式事务时,InnoDB的事务隔离级别必须设置为SERIALIABLE

  • 组成:

资源管理器(MYSQL数据库)

事务管理器(客户端)

应用程序

  • 两段式提交:

第一阶段:参与节点 -> 事务管理器:PREPARE

第二阶段:事务管理器 -> 参与节点:ROLLBACK / COMMIT

如果任何一个节点不能提交,则所有节点都要回滚

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值