MYSQL数据库中的事务

事务:事务是“数据库”中的一个概念,指业务处理中的“一个业务”对应数据库中多部的操作。

事务_MySQL中的事务处理:

a> MySQL中默认的事务处理方式:自动提交--将每条sql语句都看作是一个独立的事务,执行后会立即更改数据哭,与其他sql语句没有关联,不能满足对事务处理的需求

b> 查看当前mysql的事务处理方式:

          show variables like 'autocommit';

c> mysql中处理事务方式有两种

1> 关闭自动提交,变为“手动提交”

                    set autocommit =off

                    执行sql语句

                    提交/回滚

                    commit或者rollback

扫描二维码关注公众号,回复: 208076 查看本文章

注:当提交或者回滚后,之前所有的sql语句被全部处理,要么全部更改到数据库,要么全部取消之后再写新的sql语句,就是新的事务了

一旦提交后不能再回滚了;一旦被回滚后,就不能再提交了。

2> 在“自动提交”状态下,临时开启一个“手动事务”

                    start transaction     开启一个临时事务

                    sql语句

                    提交或者回滚

                   注意:只要提交或者回滚,这个事务就结束了,立即恢复到之前的自动事务状态,

                              事务对于MySQL是会话级别的,每个会话都可以单独设置事务处理,互不影响,互相隔离

                              在一个会话中查询结果是可以查到之前的修改的结果的,不论提交/回滚

                              但在另外一个会话中,不能读取到一个事务未提交的数据(mysql的默认隔离级别).事务_事务的特性

 1.原子性(Atomicity)原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
 2.一致性(Consistency)事务前后数据的完整性必须保持一致。
 3.隔离性(Isolation)事务的隔离性是指多个用户并发访问数据库时,一个用户的事务不能被其它用户的事务所干扰,多个并发事务之间数据要相互隔离。
 4.持久性(Durability)持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。

事务_如果不考虑两个事务的隔离性会产生的问题:

 1.脏读:一个事务读到了另一个事务未提交的数据.
 2.不可重复读:一个事务读到了另一个事务已经提交(update)的数据。引发另一个事务,在事务中的多次查询结果不一致。
 3.虚读 /幻读:一个事务读到了另一个事务已经提交(insert)的数据。导致另一个事务,在事务中多次查询的结果不一致。

事务_事务的隔离级别:

 1).在数据库端,可以通过"设置事务的隔离级别"来决定两个事务的相互影响程度:
 2).四个隔离级别:

 1).read uncommitted:读未提交;最低级;基本上不隔离。可以读到脏数据。
 2).read committed:读已提交;可以解决脏读,但不能解决"不可重复读"和"幻读";
 3).repeatable read: 可重复读。在MYSQL下可以解决:脏读、不可重复的、幻读;(MySQL的默认级别)
 4).serializable :将两个事务完全隔离,一个事务未结束时,另一个事务必须等待;

 3).查看当前数据库的隔离级别:
  select @@tx_isolation;
 4).设置会话的事务隔离级别:

  set session transaction isolation level 上面的四个隔离级别之一;
 5).安全和性能对比
  安全性:serializable > repeatable read > read committed > read uncommitted
  性能 : serializable < repeatable read < read committed < read uncommitted
 6).常见数据库的默认隔离级别:
  MySql:repeatable read(第三级)
  Oracle:read committed(第二级)

猜你喜欢

转载自754054144.iteye.com/blog/2399211