mysql事务

Spring事务管理

时间秒杀一切 提交于 2020-01-04 01:39:00
1.Spring事务介绍: 什么是事务: 事务逻辑上的一组操作,组成这组操作的各个逻辑单元,要么一起成功,要么一起失败. 事务的4个特性(ACID): 1)原子性(Atomicity):事务是一个原子操作,由一系列动作组成。事务的原子性确保动作要么全部完成,要么完全不起作用。 2)一致性(Consistency):一旦事务完成(不管成功还是失败),系统必须确保它所建模的业务处于一致的状态,而不会是部分完成部分失败。在现实中的数据不应该被破坏。 3)隔离性(Isolation):可能有许多事务会同时处理相同的数据,因此每个事务都应该与其他事务隔离开来,防止数据损坏。 4)持久性(Durability):一旦事务完成,无论发生什么系统错误,它的结果都不应该受到影响,这样就能从任何系统崩溃中恢复过来。通常情况下,事务的结果被写到持久化存储器中。 2.事务管理器 :JDBC、Hibernate、JPA、JTA四种事务管理器。 spring事务管理原理是动态代理。 3.基本事务属性 3.1 事务的5种隔离级别 并发事务引起的问题: 在典型的应用程序中,多个事务并发运行,经常会操作相同的数据来完成各自的任务。并发虽然是必须的,但可能会导致以下的问题 : 脏读 :一个事务读到了另一个事务的 未提交 的update数据 . 不可重复读 :一个事务读到了另一个事务 已经提交 的 update

Spring事务中的隔离级别

跟風遠走 提交于 2020-01-04 01:34:25
TransactionDefinition接口中定义了五个表示隔离级别的常量: TransactionDefinition.ISOLATION_DEFAULT:使用后端数据库默认的隔离界别,MySQL默认采用的REPEATABLE_READ隔离级别,Oracle默认采用的READ_COMMITTED隔离级别。 TransactionDefinition.ISOLATION_READ_UNCOMMITTED:最低的隔离级别,允许读取,允许读取尚未提交的的数据变更,可能会导致脏读、幻读或不可重复读。 TransactionDefinition.ISOLATION_READ_COMMITTED:允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生。 TransactionDefinition.ISOLATION_REPEATABLE_READ:对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生。 TransactionDefinition.ISOLATION_SERIALIZABLE:最高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就说,该级别可以阻止脏读、不可重复读以及幻读。但是这将严重影响程序的性能。通常情况下也不会用到该级别。 来源:

事务的传播行为和隔离级别

吃可爱长大的小学妹 提交于 2020-01-04 01:31:10
事务使用步骤如下: 步骤一、在spring配置文件中引入<tx:>命名空间 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"> 步骤二、具有@Transactional 注解的bean自动配置为声明式事务支持 <!-- 事务管理器配置, Hibernate单数据源事务 --> <bean id="defaultTransactionManager" class="org.springframework.orm.hibernate3

数据库事务隔离级别

我的未来我决定 提交于 2020-01-04 01:25:58
数据库隔离级别 : 是在在数据库操作中,为了有效保证并发读取数据的正确性提出的。   隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大。对于多数应用程序,可以优先考虑把 数据库系统 的隔离级别设为Read Committed。它能够避免脏读取,而且具有较好的并发性能。尽管它会导致 不可重复读 、 幻读 和 第二类丢失更新 这些并发问题,在可能出现这类问题的个别场合,可以由应用程序采用 悲观锁 或 乐观锁 来控制。 数据库的几种隔离级别: READ UNCOMMITTED (读未提交数据):允许事务读取未被其他事务提交的变更数据,会出现脏读、不可重复读和幻读问题。 READ COMMITTED (读已提交数据):只允许事务读取已经被其他事务提交的变更数据,可避免脏读,仍会出现不可重复读和幻读问题。 REPEATABLE READ (可重复读):确保事务可以多次从一个字段中读取相同的值,在此事务持续期间,禁止其他事务对此字段的更新,可以避免脏读和不可重复读,仍会出现幻读问题。 SERIALIZABLE (序列化):确保事务可以从一个表中读取相同的行,在这个事务持续期间,禁止其他事务对该表执行插入、更新和删除操作,可避免所有并发问题,但性能非常低。 Oracle支持两种事务隔离级别:    READ COMMITTED (默认事务隔离级别),

JDBC控制事务

不羁的心 提交于 2020-01-04 01:25:31
概念 事务(Transaction)是访问并可能更新数据库中各种 数据项 的一个程序执行单元(unit)。事务通常由 高级数据库 操纵语言或编程语言(如SQL,C++或Java)书写的 用户程序 的执行所引起,并用形如begin transaction和end transaction语句(或 函数调用 )来界定。事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。 例如:在 关系数据库 中,一个事务可以是一条SQL语句,一组SQL语句或整个程序。 特性 事务是恢复和 并发控制 的基本单位。 事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。 原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。 一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。 隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。 持久性(durability)。持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的

要想写好“增删改查”,你必须知道的MySQL InnoDB相关知识

此生再无相见时 提交于 2020-01-03 05:34:34
要想写好“增删改查”,你必须知道的MySQL InnoDB相关知识 MySQL InnoDB 锁的类型 共享锁(SLock) 排他锁(XLock) 读的类型 一致性非锁定读(快照读) 一致性锁定读(当前读) 事务的隔离级别 READ UNCOMMITTED READ COMMITTED REPEATABLE READ SERIALIZABLE 事务的并发问题 脏读 不可重复读 丢失更新 MySQL InnoDB MySQL InnoDB是最常用的MySQL数据库引擎,作为一个后端程序员,必须对它有所了解。这篇博客的相关内容是参考《MySQL技术内幕 InnoDB存储引擎》第2版 锁的类型 共享锁(SLock) 共享锁就是多个事务对于同一数据可以共享一把锁,都能访问到数据,但是只能读不能修改。SQL语句:SELECT … LOCK IN SHARE MODE 排他锁(XLock) 允许事务删除或更新一行数据。排他锁就是不能与其他锁并存,如一个事务获取了一个数据行的排他锁,其他事务就不能再获取该行的锁,包括共享锁和排他锁。获取排他锁的事务是可以对一行数据读取和修改。SQL语句:SELECT FOR UPDATE 读的类型 一致性非锁定读(快照读) 如果读取的行正在执行delete或update操作,这时读取操作不会因此去等待行上的锁释放,而是去读取一个快照数据

mysql第八课

主宰稳场 提交于 2020-01-02 23:37:46
开启事务: START TRANSACTION; 提交事务: COMMIT; 回滚事务: ROLLBACK; 事务的概念:原子性,一致性,隔离性,持久性 READ UNCOMMITTED(读了未提交) READ COMMITTED(读提交) REPEATABLE READ (可重复读) SERIALIZABLE(可串行化) 来源: https://www.cnblogs.com/zmh0227/p/12142798.html

数据库设计那些事儿

两盒软妹~` 提交于 2020-01-02 16:24:35
逻辑设计 一行数据中的每个属性值都叫做分量 基于上面几个实体。画出他们的ER图: 一对一 一对多 多对多 逻辑设计中使用的一些规范: 数据库操作异常与数据冗余 第一范式: 第二范式: 说白了,就是 联合主键中的某一关键字,决定着非关键字的值 ,就不符合二范式 第三范式: BC范式: 物理设计: 选择哪种数据库? 大的事务性操作推荐Oracle,Oracle同时也是大型的关系型数据库 MySQL存储引擎: MyISAM:写很少 读很多,不支持事务 InnoDB,适用于事务,行级锁,没有表级锁,推荐使用 MySQL5.5以后默认的存储引擎 MySQL 表及字段的命名规则 来源: CSDN 作者: 留歌36 链接: https://blog.csdn.net/liuge36/article/details/103798873

Spring笔记4

陌路散爱 提交于 2020-01-01 12:50:04
Spring中的JdbcTemplate JdbcTemplate:他是spring框架中提供的一个对象,是对原始Jdbc API对象的简单封装。 JdbcTemplate的作用:用于和数据库交互的,实现对表的CRUD操作 JdbcTemplate的入门 导入相关的坐标 <packaging>jar</packaging> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.2.8.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.0.3.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>5.0.3.RELEASE</version> </dependency> <dependency>

MySQL基础之事务编程学习笔记

自古美人都是妖i 提交于 2020-01-01 12:27:54
MySQL基础之事务编程学习笔记 在学习《MySQL技术内幕:SQL编程》一书,并做了笔记。本博客内容是自己学了《MySQL技术内幕:SQL编程》事务编程一章之后,根据自己的理解做的笔记,内容和书本并不一致,不过书本实验都经过自己验证,基于MySQL5.7版本。做笔记的目的是方便自己复习,同时分享出来或许对其他人或许有点帮助 1、事务概述 事务是数据库区别于文件系统的重要特性之一,提到事务肯定会想到事务的4个特性ACID,要保证业务的正常使用,必须保证ACID,ACID表示原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性(durability),一个运行良好的事务系统也是要求具备这些特征 原子性(atomicity):一个事务必须被视为一个不可分割的最小工作单位,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,不能只执行一部分操作 一致性(consistency):一致性要求数据库总是从一个一致性的状态转换为另外一个一致性的状态,比如银行转账的例子,一个用户转账账号里减了200元,另外一个收账账号必须增加,一个失败数据必须全部回退状态,要保证事务一致性 隔离性(isolation):一般来说,一个事务所做的修改在提交之前对其它事务来说都是不可见的 持久性(durability):事务一旦提交