您的位置:首页 > 其它

事务传播机制 事务隔离级别

2017-03-18 14:18 162 查看
一:事务传播机制一共7种,可分为两类。



1.需要事务

1.1-EREQUIRED(默认值):如果没有事务,就打开一个事务。如果事务已经打开,则共用这个事务

1.2-MANDATORY:如果没有事务,不会打开新的事务,会报异常。如果事务已经打开,则共用这个事务

1.3-REQUIRES_NEW:如果没有事务,就打开一个事务。如果事务已经打开,则将正在运行的事务挂起,该事务先执行(优先级高于已经打开的事务)。

1.4-NESTED:涉及嵌套事务。如下图,如果事务B中propagation=EREQUIRED/MANDATORY,则共用事务;如果propagation=REQUIRES_NEW,则事务B先执行。嵌套事务慎用,和数据库事务处理机制有关。



2.不需要事务

2.1- SUPPORTS’没有事务,不会打开事务,照常执行。有事务打开,就跟事务一起,照常执行。

2.2-NEVER:不要事务,有事务打开就报错。

2.3-NOT_SUPPORTED:不需要事务,但是如果有事务打开,则将该事务挂机,先执行自己(优先级高)。

二:事务隔离级别:下面是5中事务隔离级别


1—DEFAULT(默认值):每个数据库的默认值不一样oracle/sqlsever:READ_COMMITTED;mysql:REPEATABLE_READ。

2—READ_UNCOMMITTED:未提交读。查询速度快,可能会有脏数据。使用于数据完整性不是很严格的场合。

3—READ_COMMITTED:提交读。隔离级别最低要求,可避免脏读的发生。可能出现不可重复读,幻读。

4—REPEATABLE_READ:可重复读。可避免脏读、不可重复读的发生,可能出现幻读。

5.SERIALIZABLE:串行读。安全,速度慢。可避免脏读、不可重复读、幻读的发生。

脏读:是指在一个事务处理过程里读取了另一个未提交的事务中的数据

不可重复读:是指在对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,这是由于在查询间隔,被另一个事务修改并提交了。

幻读:和不可重复读都是读取了另一条已经提交的事务(这点就脏读不同),所不同的是不可重复读查询的都是同一个数据项,而幻读针对的是一批数据整体(比如数据的个数)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  事务