笔记:数据库事务基础

数据库

A:数据库是什么?
B:数据库当然是指用来存储数据的仓库呀,但实际上一般是指DBMS
A:DBMS
B:对,DBMS是用来管理数据的,包括数据的新增、删除、修改和查询。常见的DBMS如Oracle和MySQL
B:我现在的工作中就要用到Oracle,但一般都说我们用的数据库是Oracle,严谨的说法应该是我们用的数据库管理系统是Oracle
A:你能解释得简单点,详细点吗?
B:好的,我试试
B:比如说Oracle,它实际上就是一个软件,就像微信,微信可以用来聊天,Oracle可以用来管理数据,这里的数据主要是指结构化数据
A:结构化数据?
B:如何说你使用微信的时候要你登录,登录一般要用到用户名和密码对吧
A:嗯嗯,现在都是用手机号一键登录了
B:本质上是一样的,只要能够唯一的识别
B:这里简单的

事务

事务(Transcation)是指数据库系统的一组操作序列,该组操作序列要么全部执行,要么全部不执行

-- 一个完整的事务
begin; //开始事务
insert into test_user values(1, '大土', 26); //具体操作
update test_user age = 20; //具体操作
commit; //结束事务

一个事务的组成
根据事务的定义, ISO/IEC 提出事务一般具备ACID特性

数据库系统为什么需要事务?
因为业务中存在需求,最常举的例子就是银行转账业务,转账人的扣款操作和收款人的入款操作必须一致,要么都成功,要么都失败

ACID

ACID是 Atomicity(原子性) Consistency(一致性) Isolation(隔离性) Durability(持久性)的缩写

  • A :属于同一事务的操作要么全部都执行,要么全部都不执行
  • C :事务执行之后,数据要么与之前保持一致,要么与事务预期一致,不存在其他状态
  • I :各个事务之间相互独立执行,一个事务的开始和结束不受其他事务影响
  • D :事务执行之后,数据的状态会一直保持到被其他事务改变

事务的隔离特性会产生这样一个问题:多个事务操作同一数据时,各个事务在各自不同操作阶段可能相互交叉执行,而不同的交叉组合会产生不同的数据结果,因此SQL标准定义了四种级别来阐述这些组合所产生的不同数据结果

四种隔离级别

  • READ UNCOMMITTED:一个事务可以读取另一个事务未提交的数据(可能产生 脏读现象不可重复读现象幻读现象
  • READ COMMITTED:一个事务只能读取另一个事务已经提交的数据,但不保证多次读取的结果保持一致(可能产生 不可重复读现象幻读现象
  • REPEATABLE READ:一个事务只能读取另一个事务已经提交的数据,但保证多次读取的结果保持一致(可能产生 幻读现象
  • SERIALIZABLE:多个事务以串行顺序执行

数据库操作系统底层实现隔离性是通过锁和MVCC

MVCC

MVCC是 Multi-Version Concurrency Contorl的缩写,译为多版本并发控制,是指在并发访问数据库系统时,对正在事务内处理的数据做多版本的管理,以此来避免由于写操作的堵塞而引发读操作失败的并发问题。简单来说,MVCC就是一个数据临时保留多个版本,从而实现并发控制

例如:在REPEATABLE READ的隔离级别中,一个事务重复读取到相同的数据,该数据是其他事务未修改之前的数据,这里就利用了MVCC,读到的数据来源于快照

参考资料

MySQL MVCC 设计缺陷

【MySQL(5)| 五分钟搞清楚 MVCC 机制】

MVCC到底是什么?这一篇博客就够啦

五分钟搞清楚MySQL事务隔离级别

MySQL 事务隔离级别和锁

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值