事务一:数据库基础知识

事务

  • 一:事务概述
数据库事务(简称:事务)是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。
一个数据库事务通常包含了一个序列的对数据库的读/写操作。它的存在包含有以下两个目的:
      1) 为数据库操作序列提供了一个从失败中恢复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持一致性的方法。
       2)当多个应用程序在并发访问数据库时,可以在这些应用程序之间提供一个隔离方法,以防止彼此的操作互相干扰。

 

事务的四个特性:ACID

1.原子性 aotmic 

 事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。

2.一致性 consistent

事务在完成时,必须使所有的数据都保持一致状态。

3.隔离性 isolaton

由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。事务查看数据时数据所处的状 态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据

4.持久性 duration

事务完成后,它对系统的影响是永久性的

 

  • 二:隔离级别

1.隔离级别概述

事务隔离定义了数据库系统中一个操作产生的影响什么时候以哪种方式可以对其他并发操作可见。

即:主要影响的是并发事务之间的可见性

   (1)未提交读Read Uncommitted

    最低级别的隔离级别:意思就是即使一个更新语句没有提交,但是别的事务可以读到这个改变.这是很不安全的,可能会出现脏读。

    (2)读提交 Read Committed

直译就是"读提交",意思就是语句提交以后即执行了COMMIT以后别的事务就能读到这个改变. 可能会出现不可重复读

    (3)可重复读 Repeatable Read

直译就是"可以重复读",这是说在同一个事务里面先后执行同一个查询语句的时候,得到的结果是一样的.可能会出现幻读。

   (4)序列化 Serializable

直译就是"序列化",在这个级别下,所有的事务的完整性都被保留,意味着所有的事务都可以被序列化的执行,只有当两个事务之间没有任务冲突时,才能并发的执行。
 

2.隔离级别修改SQL

     (1) 查询mysql数据库系统级别的事务隔离级别

select @@global.tx_isolation

 

   (2)InnoDB会话级别的事务隔离级别

 SELECT @@tx_isolation

 

(3)修改数据库事务隔离级别

SQL SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE} 

 

3.隔离级别VS读现象(Read phenomena)

举例说明

在表user 中有下列数据

mysql> select * from user;
+----+----------+------+
| id | username | age  |
+----+----------+------+
|  1 | juzy     |   20 |
+----+----------+------+
1 row in set (0.00 sec)

 

1.脏读  dirty reads 

当一个事务允许读取另外一个事务修改但未提交的数据时,就可能发生脏读(dirty reads)。

2.不可重复读(non-repeatable reads)

在一次事务中,当一行数据获取两遍得到不同的结果表示发生了“不可重复读(non-repeatable read)”.

 

3.幻读 (phantorm read )

 在事务执行过程中,当两个完全相同的查询语句执行得到不同的结果集。这种现象称为“幻影读(phantom read)”

离级别        脏读(Dirty Read)         不可重复读(NonRepeateable Read)  幻读(Phantom Read)
未提交读(Read uncommitted) 可能 可能 可能
已提交读(Read committed) 不可能 可能 可能
可重复读(Repeatable read) 不可能 不可能 可能
可序列化(Serializable) 不可能 不可能 不可能
  • 三:隔离级别VS锁 
隔离级别 写入锁 读取锁 范围锁
未提交读      
已提交读 YES    
可重复读 YES YES  
可序列化 YES YES YES

参考link: 

[1]http://zh.wikipedia.org/wiki/%E6%95%B0%E6%8D%AE%E5%BA%93%E4%BA%8B%E5%8A%A1

[1]http://zh.wikipedia.org/wiki/%E4%BA%8B%E5%8B%99%E9%9A%94%E9%9B%A2

[2]https://www.byvoid.com/blog/rdbms-isolation-lock-concurrency

 

你可能感兴趣的:(数据库)