`
juzy_xie
  • 浏览: 515 次
  • 来自: 杭州
社区版块
存档分类
最新评论

事务一:数据库基础知识

 
阅读更多

 

  • 一:事务概述
数据库事务(简称:事务)是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。
一个数据库事务通常包含了一个序列的对数据库的读/写操作。它的存在包含有以下两个目的:
      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} 

 

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

举例说明

在表user 中有下列数据

mysql> select * from user;
+----+----------+------+
| id | username | age  |
+----+----------+------+
|  1 | juzy     |   20 |
+----+----------+------+

 

1.脏读  dirty reads 

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

如下实例:事务1隔离级别设置为read uncommitted,事务2正在修改id=1的数据还没有提交,事务1读取到了这一数据。如果事务2回滚,那么事务1就获取到了脏数据

事务1

 

事务2
mysql> set session transaction isolation level read uncommitted;
 
 
mysql> start transaction;
mysql> update user set age=30 where id=1;
 
mysql> select * from user where id =1;
+----+----------+------+
| id | username | age  |
+----+----------+------+
|  1 | juzy     |   30 |
+----+----------+------+
 

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

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

未提交读和提交读都有可能发生不可重复读现象。

事务1 事务2
mysql> select * from user where id =1;
+----+----------+------+
| id | username | age  |
+----+----------+------+
|  1 | juzy     |   20 |
+----+----------+------+
 
 
 
mysql> update user set age=30 where id=1;
 
mysql> select * from user where id =1;
+----+----------+------+
| id | username | age  |
+----+----------+------+
|  1 | juzy     |   30 |
+----+----------+------+
 
 

 

3.幻读 (phantorm read )

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

事务1 事务2
mysql> select * from user where age>=20;
+----+----------+------+
| id | username | age  |
+----+----------+------+
|  1 | juzy     |   20 |
+----+----------+------+
 
 
 
mysql> insert into user(id,username,age)values(2,'yolanda',30);
 
mysql> select * from user where age>=20;
+----+----------+------+
| id | username | age  |
+----+----------+------+
|  1 | juzy     |   20 |
|  2 | yolanda  |   30 |
+----+----------+------+
 
 

 

 

各个隔离级别可能会出现的读现象 

离级别        脏读(Dirty Read)         不可重复读(NonRepeateable Read)  幻读(Phantom Read)
未提交读(Read uncommitted) 可能 可能 可能
已提交读(Read committed) 不可能 可能 可能
可重复读(Repeatable read) 不可能 不可能 可能
可序列化(Serializable) 不可能 不可能 不可能

 

不可重复读和幻读的区别

很多人容易搞混不可重复读和幻读,确实这两者有些相似。但不可重复读重点在于update和delete,而幻读的重点在于insert。

  • 四.默认的隔离级别

目前mysql的默认隔离级别是RR,oracle的默认隔离级别是RC

且mysql的RR 级别下不会出现幻读。see http://www.ningoo.net/html/2008/mysql_innodb_transaction_isolation_level.html

 

  • 五:隔离级别VS锁

在传统的数据库系统的实现中,一般实现不同等级的隔离性方法是使用锁定(lock)

1.锁

乐观锁(optimistic locking):乐观锁相信数据之间的数据竞争的概率是比较小的,因此尽可能的会直接做下去,知道提交的时候去锁定,但是有可能会遇到冲突。

 一种可靠的乐观锁的实现是使用多版本控制(multi-version concurrency control),即在每一行加一个version属性,修改这一行时将version加1,写回数据库要检查当地前的version值是否还是获取时候的值,如果海华丝,说明在此期间没有修改,commit即可,如果不是,说明在此期间已经有修改了,当前事务获取的数据已过期,事务失败。

 

悲观锁(Pessimistic Concurrency Control):先取锁再访问

 

可重复读的两种实现方式:(1)悲观锁 (2)多版本并发控制MVCC 

 

 

隔离级别 写入锁 读取锁 范围锁
未提交读      
已提交读 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

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

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

[4]http://tech.meituan.com/innodb-lock.html

 

分享到:
评论

相关推荐

    数据库基础知识点:数据库参考题

    ### 数据库基础知识点详解 #### 一、事务的特性 - **原子性(Atomicity)**: 事务被视为一个不可分割的工作单元,整个事务要么全部完成,要么完全不做。 - **一致性(Consistency)**: 事务完成后,数据必须处于...

    第一章 数据库基础知识

    本文将深入解析“第一章 数据库基础知识”所涵盖的核心概念,帮助读者理解数据库的基础架构、创建过程以及相关参数设置。 #### 数据库的创建与结构 数据库的创建是构建数据存储系统的首要步骤。根据所提供的部分...

    数据库基础知识概述.pptx

    数据库性能问题是数据库基础知识的重要组成部分,包括查询优化、索引优化、连接优化、事务管理等。这些内容需要了解数据库管理系统的基本概念和操作命令。 本篇资源摘要信息对数据库基础知识进行了概述,涵盖了...

    知识领域: 数据库管理 技术关键词: SQL、NoSQL、数据库优化、数据建模 内容关键词: 数据库设计、查询优化、事务处理 用

    知识领域: 数据库管理 技术关键词: SQL、NoSQL、数据库优化、数据建模 内容关键词: 数据库设计、查询...资源描述: Coursera 上的《数据库管理原理》课程由知名大学教授授课,涵盖了数据库管理的基础知识和实践应用。

    Java典型应用彻查1000例第四卷:数据库应用基础(源码+PPT+习题).rar

    《Java典型应用彻查1000例第四卷:数据库应用基础》是一本全面解析Java在数据库应用领域的专著,其配套的压缩包资源包括源码、PPT讲解材料以及习题,旨在帮助读者深入理解和掌握Java与数据库的交互技术。下面我们将...

    数据库基础知识介绍数据库基础知识介绍

    数据库是存储和管理数据的重要工具,它为各类应用程序提供数据...以上就是数据库基础知识的概述,涵盖了数据库的定义、类型、模型、SQL语言以及DBMS的相关知识。理解并掌握这些内容,对于理解和应用数据库至关重要。

    Oracle数据库基础知识

    Oracle数据库基础知识 Oracle数据库基础知识是指对Oracle数据库的基本概念、结构、管理和操作的了解。Oracle数据库是一种关系型数据库管理系统,由 Oracle Corporation 开发和维护。 课程目标: * 了解Oracle...

    数据库基础知识3数据库基础知识3

    总之,“数据库基础知识3”涵盖了数据库的各个方面,从基本概念到具体应用,包括数据库类型、设计原则、操作语言、事务处理、并发控制以及备份恢复。掌握这些知识对于任何涉及数据管理的IT专业人士来说都是必要的。

    SQL_Server数据库基础知识

    SQL Server数据库基础知识是IT行业中非常重要的一个领域,它涵盖了关系数据库管理、SQL语言以及SQL Server 2000系统组件等多个方面。以下是对这些知识点的详细说明: 1. **关系数据库**:关系数据库是一种基于关系...

    数据库基础知识2数据库基础知识2数据库基础知识2

    在深入探讨数据库基础知识之前,我们首先要明白数据库的基本概念。数据库(Database)是一个有组织的、可共享的数据集合,这些数据按照特定的数据模型组织,可以高效地进行存储、检索、更新和删除操作。 在描述中,...

    Mac-数据库基础考试试题

    这些题目涉及到的数据库基础...这些知识点涵盖了数据库的基本概念、数据模型、数据库管理系统、事务处理、并发控制、数据独立性、SQL语言的使用以及数据库设计中的规范化理论等方面,是学习数据库基础知识的重要内容。

    三级数据-库技术:数据库基本知识

    在这个主题中,我们探讨了几个关键章节,涵盖了计算机系统、数据结构、操作系统、数据库基础、关系数据库、设计与分析、数据库管理系统以及安全性等多个方面。 首先,了解计算机系统的基础知识至关重要,包括它的...

    数据库Mysql基础知识总结

    **数据库MySQL基础知识总结** 在IT领域,MySQL是一个广泛使用的开源关系型数据库管理系统,以其高效、稳定和易用性而备受青睐。以下是对MySQL基础知识的详细总结: ### 1. MySQL基本概念 - **数据库(Database)*...

    第13章数据库基础知识.ppt

    由于提供的信息非常有限,内容几乎为空,我们仅能从标题“第13章数据库基础知识.ppt”来推测可能的知识点。根据标题,可以假设这是一份关于数据库系统教育或学习的幻灯片讲义,主要讲解的是数据库的基础概念和原理。...

    数据库基础知识:数据库基础知识:关系数据库和非关系数据库

    学习数据库基础知识,需要掌握SQL的基本语法,包括如何创建表、定义字段、设置约束,以及如何执行查询、更新和删除操作。同时,了解NoSQL数据库的各种类型,比如MongoDB的文档型数据库,Redis的键值对数据库,HBase...

    数据库基础知识参考试题

    数据库基础知识是计算机科学的重要组成部分,涉及数据存储、管理、检索和应用等关键问题。以下是有关数据库基础知识的核心概念和理论,参考于给定的文件内容,进行详细解析: 1. 实体-联系模型(E-R模型):是概念...

    2012年计算机考研基础班讲义专题02:数据库知识.pdf

    9. 数据库事务和并发控制: 文档提到了事务的概念,事务是数据库系统中一个完整的操作序列,要么全部执行,要么全部不执行。它是保证数据库一致性和完整性的关键。另外,文档也隐含地提到了并发控制的概念,这是指多...

    数据库运维笔试题(含答案):全面覆盖数据库基础知识与高级特性

    在选择题部分,考察了数据库基础命令、存储引擎、事务控制命令、端口号、索引概念、数据库大小查询、服务启动命令、备份命令和高可用性解决方案等方面。例如,考生需要知道在MySQL中显示当前数据库所有表的命令是...

    Oracle数据库基础知识 ISSUE1.0.doc

    Oracle数据库基础知识是IT领域中的一个重要分支,尤其对于数据库管理员(DBA)和开发人员来说,掌握Oracle的基础知识至关重要。Oracle是一款功能强大的关系型数据库管理系统,由美国Oracle公司开发,广泛应用于企业...

Global site tag (gtag.js) - Google Analytics