`

【赵强老师】数据库的事务

阅读更多

一、什么是事务?

数据库事务(Transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。

 

例如:从A账号给B账号转帐,对应于如下两条sql语句
update from account set money=money+100 where name=‘b’;
update from account set money=money-100 where name=‘a’;
 

 

这两条update语句应该作为一个整体来运行,要保证同时成功,或者同时失败;不应该存在一个成功,一个失败的情况。

 

二、数据库开启事务命令

我们可以使用下面的语句来开启或者结束一个事务。

  • start transaction  开启事务
  • rollback  回滚事务
  • commit   提交事务

例如,我们可以把上面的银行转账的update语句放到一个事务中执行。

 

start transaction;
update from account set money=money+100 where name=‘b’;
update from account set money=money-100 where name=‘a’;
commit;
 

三、事务的特征:ACID

  • 原子性(Atomicity):原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
  • 一致性(Consistency):事务必须使数据库从一个一致性状态变换到另外一个一致性状态。
  • 隔离性(Isolation):事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
  • 持久性(Durability):持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响

 

四、事务的隔离级别

多个线程开启各自事务操作数据库中数据时,数据库系统要负责隔离操作,以保证各个线程在获取数据时的准确性。

如果不考虑隔离性,可能会引发如下问题:

  • 脏读:指一个事务读取了另外一个事务未提交的数据。
  • 不可重复读:在一个事务内读取表中的某一行数据,多次读取结果不同。
  • 虚读(幻读):是指在一个事务内读取到了别的事务插入的数据,导致前后读取不一致。

数据库共定义了四种隔离级别:

  • Serializable:可避免脏读、不可重复读、虚读情况的发生。(串行化)
  • Repeatable read(MySQL的默认值):可避免脏读、不可重复读情况的发生。(可重复读)
  • Read committed:可避免脏读情况发生(读已提交)。
  • Read uncommitted:最低级别,以上情况均无法保证。(读未提交)

我们可以可以通过下面的语句来查看MySQL的事务隔离级别和设置隔离级别:

  • set (GLOBAL|SESSION) transaction isolation level 设置事务隔离级别
  • select @@tx_isolation 查询当前事务隔离级别

下面的语句将查看MySQL数据库当前的事务隔离级别。

下面的语句将MySQL的事务隔离级别设置成read committed,在这种隔离级别下,将会发生脏读的问题。

 

 

 

 

分享到:
评论

相关推荐

    从零开始oracle

    1. **用户**:直接与数据库交互的人员,包括最终用户、数据库应用系统开发员和数据库管理员。 2. **关系型数据库应用系统**:为了满足特定业务需求而开发的软件系统。 3. **关系型数据库管理系统**:位于操作系统和...

    传智播客 赵强 Oracle课件

    赵强老师在传智播客的Oracle课程是专为IT专业人士和对数据库技术感兴趣的学员设计的一系列教学资料,旨在深入浅出地讲解Oracle的核心概念、功能以及实际操作技巧。 在赵强老师的课程中,你可以学到以下几个重要的...

    赵强老师的Oracle课件

    想要好好地学习Oracle数据库的朋友呀,你错过了她就太不值得了。里面有好多的Oracle操作命令可能你都没接触过吧。好了,话不多多说。坚信资料不错!你,值得拥有!OK.还有,之所有要你2分打赏,是我给了你这么好的...

    Oracle数据库赵强视频教程【3天】

    教程名称:Oracle 数据库赵强视频教程【3天】教程目录:【】Oracle安装与管理、SQL语句(赵强)【】Orcale存储过程jdbc与Orcale大文本操作等(赵强)【】SQL简单查询触发器视图(赵强)  资源太大,传百度网盘了,链接在...

    精通JSP编程 作者赵强 编

    精通JSP编程 作者赵强 编 12-18节

    精通JSP编程 作者赵强

    《精通JSP编程》是赵强先生的一部深入解析JSP技术的专业著作,该书针对JSP编程进行了全面且深入的讲解,旨在帮助读者掌握JSP的核心概念和技术,提升Web应用开发能力。根据提供的文件名列表,我们可以推测书籍的章节...

    Oracle学习笔记(传智播客 赵强)

    在Oracle数据库的学习中,SQL优化是一项至关重要的技能,因为它直接影响到数据库的性能和查询效率。以下是一些关于SQL优化的关键知识点: 1. **使用列名代替通配符(*)**:在编写SQL查询时,避免使用`*`来获取所有列...

    二年级数学生活中的大数赵强PPT课件.pptx

    今天,我们将与赵强老师一同探索数学领域的一个重要主题——“生活中的大数”。这个主题通过生动的例子和清晰的逻辑,帮助孩子们在日常生活中感知和理解大数的存在及其重要性。 “生活中有大数”,这不仅是一句简单...

    [1120][赵强精通JSP编程][37M]

    根据提供的文件信息,我们可以推断出这是一份与Java Server Pages (JSP)相关的学习资料介绍,特别是关于赵强编写的《精通JSP编程》这本书的相关信息。下面将基于这个理解来生成相关知识点。 ### 一、JSP基础概念 ...

    10天掌握MongoDB

    然而,NoSQL数据库也有其缺点,例如缺乏事务一致性,缺乏读写实时性,以及不支持复杂的查询操作。 NoSQL数据库主要分为几类,包括键值存储、列式存储、文档型数据库和图结构数据库。键值存储通过键直接访问数据,...

    oracle 课件

    Oracle 11g 是 Oracle 公司推出的一款功能强大的关系型数据库管理系统(RDBMS)。它不仅提供了一整套完整的数据管理解决方案,还支持多种高级特性,如分区、并行查询处理等,使得数据处理更加高效和灵活。针对初学者...

    day2013-0110-webLogic配置和集群(赵强).zip

    2. JDBC数据源:配置和管理JDBC数据源,连接到数据库,提供统一的访问接口,支持数据源的连接池和事务管理。 3. SSL安全配置:为了保障通信安全,可以配置WebLogic支持SSL(Secure Sockets Layer),加密传输数据,...

    oracle课件

    事务管理是数据库操作的核心,Oracle支持ACID(原子性、一致性、隔离性和持久性)特性,保证了数据的一致性和完整性。锁和并发控制机制,如行级锁定、多版本并发控制(MVCC),都是保证并发性能和数据一致性的关键...

    oracle讲义

    Oracle数据库管理系统是全球广泛使用的大型关系型数据库系统之一,它为各类企业和组织提供高效的数据存储和管理解决方案。本文将深入探讨"Oracle讲义"中涉及的关键知识点,包括Oracle的体系结构、文件管理、光标、...

    二年级数学生活中的大数赵强PPT学习教案.pptx

    本文将针对一份面向二年级学生的数学学习教案进行解读,这份教案的标题为:“二年级数学生活中的大数赵强PPT学习教案”。 教案的核心目标是帮助孩子们理解并能够应用生活中的大数。课程内容不仅限于数学知识的传授...

    LoadRunner性能测试巧匠训练营-完整版(带目录)-赵强邹伟伟

    《LoadRunner性能测试巧匠训练营》是一本深入讲解LoadRunner性能测试的教材,由赵强和邹伟伟两位专家共同编著。该资源提供的是完整版,且无需密码即可解压阅读,对于想要学习和提升LoadRunner性能测试技能的人来说,...

    信息存储技术的发展赵强.doc

    《信息存储技术的发展》 信息存储技术,作为信息技术的基石之一,从早期的岩画、古书,到现代的半导体、磁盘、光存储,再到先进的集群存储和虚拟化技术,其发展历程见证了人类社会的巨大变革。...

    赵强_微信购物首页改版用户调研1

    微信购物首页用户调研报告主要关注了微信购物首页用户的浏览动机、痛点以及不同用户群体的行为特征。报告通过定性和定量研究方法,包括一对一深访和问卷调查,收集了大量数据,旨在理解用户需求并优化用户体验。...

    java代码-46 赖赵强

    【标题】"java代码-46 赖赵强"所指的可能是一个关于Java编程的项目或示例,由开发者赖赵强创建。在这个项目中,他可能分享了一段特定的Java代码,用于解决某种问题或者实现一个功能。这个标题暗示了这是一个与Java...

Global site tag (gtag.js) - Google Analytics