事务:由一系列操作组成的一个逻辑工作单元
如,向账户中存入100元就是一个事务
事务类型:
1.自动提交,即执行完update马上保存数据
2.手动提交,执行update不保存数据,先放入
缓存,只有执行commit,才保存数据
java代码:
conn.setAutoCommit(false);//设置手动提交,sql执行放入缓存
conn.commit(); //手动提交,清空缓存,刷入数据库保存
conn.rollback(); //回滚,清空缓存
---------------------------------------
事务的ACID属性:
原子性(Atomicity) :
事务是一个不可分割的工作单位,
事务中的操作要么都发生,要么都不发生。
一致性(Consistency) :
事务必须使数据库从一个一致性状态变换到另外一个一致性状态。
(数据不被破坏)
隔离性(Isolation):
事务的隔离性是指一个事务的执行不能被其他事务干扰,
即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,
并发执行的各个事务之间不能互相干扰。
持久性(Durability):
持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,
接下来的其他操作和数据库故障不应该对其有任何影响
-------------------------------------
隔离的四个级别:对事物并发控制的四个等级。
-串行化(序列化)(serializable)
事务串行访问,不能并发访问
所以不可能导致脏读、幻读、不可重复读
-可重复读(repeatable read)
不可能产生脏读、不可重复读,
可能产生幻读。
-读已提交(read committed)
事务过程中不可能产生脏读了
但可能产生不可重复读、幻读
-读未提交(read uncommitted)
能查到其他事务未提交的数据,可能导致脏、幻、不可重复读
-------------------------------------------------
*脏读(dirty read):当一个事务正在访问数据,并且对数据进行了修改,
而这种修改还没有提交到数据库中,这时,
另外一个事务也访问这个数据,然后使用了这个修改后的数据。
即,读到未提交的数据。
*幻读(phantom read):当第一个事务进行查询后,第二个事务对此数据执行了一个操作,
当第二个事务未提交时,第一个事务的查询结果跟原来一样,即不会
导致脏读。当第二个事务提交后,第一个事务的查询结果还是
一样的,即不会导致不可重复读。
当第一个事务对数据进行一次操作后,执行后的结果是建立在
第二个事务操作后的,查询的结果是不可思议的,即幻读。
*不可重复读(non-repeatable read):是指在一个事务内,多次读同一数据,
在这个事务还没有结束时,另外一个事务也访问该同一数据。
那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,
那么第一个事务两次读到的的数据可能是不一样的。
-------------------------------------------------------
隔离级别 | 脏读(Dirty Read) | 不可重复读(NonRepeatable Read) | 幻读(Phantom Read) |
读未提交(Read uncommitted) | 可能 | 可能 | 可能 |
读已提交(Read committed) | 不可能 | 可能 | 可能 |
可重复读(Repeatable read) | 不可能 | 不可能 | 可能 |
串行化(Serializable ) | 不可能 | 不可能 | 不可能 |
-----------------------------------------------------------------
1、mysql默认的隔离级别为Repeatable_Read
2、sqlserver 默认的隔离级别为Read Commited
3、oracle数据库支持READ COMMITTED和SERIALIZABLE两种事务隔离性级别,
不支持READ UNCOMMITTED和REPEATABLE READ这两种隔离性级别,
oracle数据库默认使用的事务隔离性级别却是READ COMMITTED.
--------------------------------------------------------
隔离操作的sql语句:
查看提交模式
select @@autocommit;
0:表示手动提交
1:自动提交
begin //开始一个事务
rollback //事务回滚
commit //提交事务
*当set autocommit =0 后,所有的SQL都将做为事务处理,直
到commit确认或rollback结束。
*注意:当你结束这个事务的同时也开启了个新的事务
查询当前事务的隔离级别
select @@tx_isolation
设置当前连接的隔离级别
SET TRANSACTION ISOLATION LEVEL 隔离级别
设置数据库系统的全局的隔离级别
SET global TRANSACTION ISOLATION LEVEL 隔离级别
相关推荐
查询:默认事务隔离级别 mysql> select @@tx_isolation;当前会话的默认事务隔离级别 mysql> select @@session.tx_isolation;当前会话的默认事务隔离级别 mysql> select @@global.tx_isolation;全局的事务隔离级别
事务传播特性&事务隔离级别 详细的事务传播特性&事务隔离级别
介绍数据库事务的四种隔离级别,比较不同隔离级别的区别和影响
MySQL的四种事务隔离级别 1、脏读 2、不可重复读 3、幻读
事务隔离级别 课程目标 了解 —— 事务隔离级别的概念; 理解 —— 事务隔离的四种级别; 掌握 —— 事务隔离级别的设置; 事务隔离级别 事务隔离:每一个事务都有一个所谓的隔离级,它定义了用户彼此之间隔离和交互...
本文档介绍了spring事务隔离级别的使用及详解
06-VIP-深入理解Mysql事务隔离级别与锁机制.pdf
java事务传播特性&事务隔离级别...
MySQL事务隔离级别详解,这个面试经常会面到,必会呀,哈哈
spring事务的传播特性和事务隔离级别
数据库事务隔离级别 数据库事务的隔离级别有4个,由低到高依次为 Read uncommitted:允许脏读。 Read committed: 防止脏读,最常用的隔离级别,并且是大多数数据库的默认隔离级别。 Repeatable read:可以防止脏...
数据库事务隔离级别.docx数据库事务隔离级别.docx数据库事务隔离级别.docx
NULL 博文链接:https://cuishuangjia.iteye.com/blog/964885
SQLSERVER事务隔离级别的实验研究.pdf
事务的属性:1.Propagation:用来设置事务的传播行为事务的传播行为:一个方法运行在了一个开启了事务的方法中时,当前方法是使用原来的事务还是开启了一个新
共享锁主要是为了共享读(select),如果存在事务(一个或多个)拥有对表中数据(关于锁数据的多少,视锁的粒度而定)的共享锁,不允许对锁定的数据进行更新(update)(从锁的角度讲,即不允许事务获取排他锁
前言 ...我们都知道事务的几种性质,数据库中的一致性和隔离性等是实现事务的基本思想,在系统有大量的并发访问的情况下,了解和熟练应用数据库的本身的事务隔离级别,对于写出健壮性,并发处理能力强
Spring事务隔离级别,详细解释SPring事务和事务的隔离级别
数据库事务和隔离级别