ACDI事物的四大特性

标签: 数据库 事务 并发
931人阅读 评论(0) 收藏 举报
分类:

ACDI事物的四大特性


  • 原子性(Atomicity)
    原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
    比如:转账转过去的加和转时候的减必须一次发生
  • 一致性(Consistency)
    事务必须使数据库从一个一致性状态变换到另外一个一致性状态。
    比如:转账时双方的总数在转账的时候保持一致
  • 隔离性(Isolation)
    事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
    比如:多个用户操纵,防止数据干扰,就要为每个客户开启一个自己的事务;
  • 持久性(Durability)
    持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。
    比如:如果我commit提交后 无论发生什么都 都不会影响到我提交的数据;

数据库开启事务命令


  1. start transaction 开启事务
  2. Rollback 回滚事务
  3. Commit 提交事务

当Jdbc程序向数据库获得一个Connection对象时,默认情况下这个Connection对象会自动向数据库提交在它上面发送的SQL语句。若想关闭这种默认提交方式,让多条SQL在一个事务中执行,可使用下列语句:
JDBC控制事务语句

Connection.setAutoCommit(false);如同数据库开启命令的 start transaction
Connection.rollback(); == rollback
Connection.commit();  == commit

设置事务回滚点

Savepoint sp = conn.setSavepoint();
Conn.rollback(sp);
Conn.commit();   //回滚后必须要提交

数据库共定义了四种隔离级别:
Serializable:可避免脏读、不可重复读、虚读情况的发生。(串行化)
Repeatable read:可避免脏读、不可重复读情况的发生。(可重复读)
Read committed:可避免脏读情况发生(读已提交)。
Read uncommitted:最低级别,以上情况均无法保证。(读未提交)
set transaction isolation level 设置事务隔离级别
select @@tx_isolation 查询当前事务隔离级别


演示不同隔离级别下的并发问题


1.当把事务的隔离级别设置为read uncommitted时,会引发脏读、不可重复读和虚读

A窗口
set transaction isolation level  read uncommitted;
start transaction;
select * from account;
-----发现a帐户是1000元,转到b窗口
select * from account
-----发现a多了100元,这时候a读到了b未提交的数据(脏读)

B窗口
start transaction;
update account set money=money+100 where name='aaa';
-----不要提交,转到a窗口查询

2.当把事务的隔离级别设置为read committed时,会引发不可重复读和虚读,但避免了脏读

A窗口
set transaction isolation level  read committed;
start transaction;
select * from account;
-----发现a帐户是1000元,转到b窗口
select * from account;
-----发现a帐户多了100,这时候,a读到了别的事务提交的数据,两次读取a帐户读到的是不同的结果(不可重复读)


B窗口
start transaction;
update account set money=money+100 where name='aaa';
commit;
-----转到a窗口

3.当把事务的隔离级别设置为repeatable read(mysql默认级别)时,会引发虚读,但避免了脏读、不可重复读

A窗口
set transaction isolation level repeatable read;
start transaction;
select * from account;
----发现表有4个记录,转到b窗口
select * from account;
----可能发现表有5条记如,这时候发生了a读取到另外一个事务插入的数据(虚读)


B窗口
start transaction;
insert into account(name,money) values('ggg',1000);
commit;
-----转到 a窗口

4.当把事务的隔离级别设置为Serializable时,会避免所有问题

A窗口
set transaction isolation level Serializable;
start transaction;
select * from account;
-----转到b窗口

B窗口
start transaction;
insert into account(name,money) values('ggg',1000);
-----发现不能插入,只能等待a结束事务才能插入
查看评论

数据库事务ACID特性

ACID特性 数据库管理系统中事务(transaction)的四个特性(分析时根据首字母缩写依次解释):原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)...
  • u012440687
  • u012440687
  • 2016年08月04日 10:16
  • 4707

数据库事物的四大特性以及事物的隔离级别

原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前面两篇博客介绍事务的功能是一样的概念,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败...
  • newdas123
  • newdas123
  • 2017年11月15日 14:47
  • 39

Spring事物隔离级别以及事物的七种传播特性详细介绍,以及应用当中需要注意的点

使用步骤: 步骤一、在spring配置文件中引入命名空间  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:tx="...
  • shukebai
  • shukebai
  • 2016年05月25日 23:52
  • 1849

事务的四种隔离级别和七种传播机制

数据库事务的隔离级别有4种,由低到高分别为Read uncommitted 、Read committed 、Repeatable read 、Serializable 。而且,在事务的并发操作中可能...
  • qq_36074180
  • qq_36074180
  • 2017年08月04日 15:22
  • 308

事务的四大特性

事务四大特性(简称ACID)  1、原子性(Atomicity):事务中的全部操作在数据库中是不可分割的,要么全部完成,要么均不执行。 2、一致性(Consistency):几个并行执行的事务,其...
  • hao123huo
  • hao123huo
  • 2011年11月08日 09:42
  • 34227

mysql的事务四个特性以及事务的四个隔离级别

务就是一组原子性的SQL查询,或者说一个独立的工作单元。如果数据库引擎能够成功地对数据应用该组查询的全部语句,那么久执行该组查询。如果其中任何一条语句因为崩溃或其他原因无法执行,那么所有语句都不会执行...
  • csdnxingyuntian
  • csdnxingyuntian
  • 2017年02月25日 14:58
  • 4960

事务是什么,以及事务四个特性

一.什么是事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消。也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做。 ...
  • xiaoyu714543065
  • xiaoyu714543065
  • 2012年11月22日 10:57
  • 76250

数据库事物ACID特性和分布式系统CAP理论

ACID特性和分布式系统CAP理论事物的介绍和认识事务通常指的是数据库事务,不要把它太概念化,就是一些列操作要么都执行要么都不执行,把这些操作封装在一个不可分割的单元体里这么理解就可以。 //备注最常...
  • liutong123987
  • liutong123987
  • 2018年02月26日 15:53
  • 16

事物的四大特性

一.什么是事务  事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消。也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做。  事务...
  • Coder_Lotus
  • Coder_Lotus
  • 2017年04月11日 14:38
  • 403

数据库的四种隔离级别

目录数据库的四种隔离级别 前言 简介 实验 0准备工作 1读取未提交 2读取已提交 3可重复读 4串行化 没想到最后一个级别出了乱子没按剧本来学海无涯数据库的四种隔离级别前言首先要推荐这个数据库的文章...
  • waltonhuang
  • waltonhuang
  • 2016年07月08日 21:56
  • 9461
    个人资料
    持之以恒
    等级:
    访问量: 3702
    积分: 177
    排名: 103万+
    文章分类
    文章存档