原 数据库中的事务概念、ACID特性和隔离级别
Tags: Oracle原创PGMySQL事务并发隔离级别MVCCACID
事务介绍及其ACID特性和隔离级别
事务简介
事务(Transaction)是一个操作序列。这些操作要么都做,要么都不做,是一个不可分割的工作单位。事务通常以BEGIN TRANSACTION开始,以COMMIT或ROLLBACK操作结束,COMMIT即提交,提交事务中所有的操作、事务正常结束。ROLLBACK即回滚,撤消已做的所有操作,回滚到事务开始时的状态。事务是数据库系统区别于文件系统的重要特性之一。
事务的作用:当多个进程都开启事务同时操作数据库中的数据时,数据库系统要能进行隔离操作,以保证各个进程获取到正确的数据。
对于事务可以举一个简单的例子:转账,有A和B两个用户,A用户转100到B用户,如下所示:
A:---->支出100,则 A-100
B:---->收到100,则 B+100
A--->B转账,对应如下SQL语句:
1 2 3 | UPDATE ACCOUNT SET MONEY=MONEY - 100 WHERE NAME='A'; UPDATE ACCOUNT SET MONEY=MONEY + 100 WHERE NAME='B'; |
事务的四个特性
事务有4个特性,一般都称之为ACID特性,简单记为原一隔持(谐音:愿意各吃,即愿意各吃各的),如下表所示:
表 2-5 事务的ACID特性
名称 | 简介 | 举例 |
---|---|---|
原子性(Atomicity) | 所谓原子性是指事务在逻辑上是不可分割的操作单元,其所有语句要么都执行,要么都撤销执行。当每个事务运行结束时,可以选择“提交”所做的数据修改,并将这些修改永久应用到数据库中。 | 假设有两个账号,A账号和B账号。A账号转给B账号100元,这里有两个动作在里面,①A账号减去100元,②B账号增加100元,这两个动作不可分割即原子性。 |
一致性(Consistency) | 事务是一种逻辑上的工作单元。一个事务就是一系列在逻辑上相关的操作指令的集合,用于完成一项任务,其本质是将数据库中的数据从一种一致性状态转换到另一种一致性状态,以体现现实世界中的状况变化。至于数据处于什么样的状态算是一致状态,这取决于现实生活中的业务逻辑以及具体的数据库内部实现。 | 拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。 |
隔离性(Isolation) | 隔离性是针对并发事务而言的,所谓并发是指数据库服务器同时处理多个事务,如果不采取专门的控制机制,那么并发事务之间可能会相互干扰,进而导致数据出现不一致或错误的状态。隔离性就是要隔离并发运行的多个事务间的相互影响。关于事务的隔离性,数据库提供了多种隔离级别,后面的章节会介绍到。 | 隔离性即要达到这么一种效果:对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前就已经结束,要么在T1结束之后才开始,这样每个事务都感觉不到有其它事务在并发地执行。 |
持久性(Durability) | 事务的持久性(也叫永久性)是指一旦事务提交成功,其对数据的修改是持久性的。数据更新的结果已经从内存转存到外部存储器上,此后即使发生了系统故障,已提交事务所做的数据更新也不会丢失。 | 当开发人员在使用JDBC(Java DataBase Connectivity,Java数据库连接)操作数据库时,在提交事务后,提示用户事务操作完成,那么这个时候数据就已经存储在磁盘上了。即使数据库重启,该事务所做的更改操作也不会丢失。 |
- 真题1、事务所具有的特性有()
A、原子性 B、一致性 C、隔离性 D、持久性
答案:A、B、C、D。
- 真题2、事务的持久性是指()
A、事务中包括的所有操作要么都做,要么不做
B、事务一旦提交,对数据库的改变是永久的
C、一个事务内部的操作及使用的数据对并发的其它事务是隔离的
D、事务必须是使数据库从一个一致性状态变到另一个一致性状态
答案:B。