mysql事务

Spring事务隔离 && 事务传播

半腔热情 提交于 2020-03-30 13:59:57
事务的四个属性: 1:原子性( Atomic ) 最重要的原则,也是最容易理解的原则。被事务管理的所有方法,要么一起被提交,要么一起回滚。 2:一致性( Consistency ) 事务在系统完整性中实施一致性,如果事务成功地完成,那么系统中所有变化将正确地应用,系统处于新 有效状态。如果在事务中出现错误,那么系统中的所有变化将自动地回滚,系统返回到原始状态。 3:隔离性( Isolation ) 在处理一个事务的时候,如果有一个事务同时处理,必须等待这个事务处理完毕,才能进行下一次 处理。 4:持久性( Durability ) 持久性意味着一旦事务执行成功,在系统中产生的所有变化将是永久的。应该存在一些检查点防止在系统 失败时丢失信息。甚至硬件本身失败,系统的状态仍能通过在日志中记录事务完成的任务进行重建。举例:在执行事务的时候,突然停电,等再来电的时候,有个事务记录通知重新执行下这个事务 。 并发问题: 脏读:(一个事务读取了未提交的事务)指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。 不可重复读:(同一个事务中多次读取同一个数据返回的结果不同 )指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改

事务隔离(3)

风格不统一 提交于 2020-03-30 11:23:53
事务 保证一组数据库操作,要么全部成功,要么全部失败。 ACID 特性 原子性: Atomicity 一致性: Consistency 隔离性: Isolation 持久性: Durability 当数据库中有多个事务同时执行的时候,就可能出现脏读( dirty read )、不可重复读( non-repeatable read )、幻读( phantom read )的问题,为了解决这些问题,就有了“隔离级别”的概念。隔离的越严实,效率就会越低,需要在两者之间找一个平衡点。 事务隔离级别 隔离级别:串行化 > 可重复读 > 读提交 > 读未提交 读未提交: read uncommitted ,一个事务还没提交时,它做的变更就能被别的事务看到。会导致“脏读”、“幻读”、“不可重复读”。 读提交: read committed ,一个事务提交之后,它做的变更才会被其他事务-看到。避免了“脏读”,但不能避免“幻读”和“不可重复读”。 可重复读: repeatable read ,一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据时一致的。当然在可重复读的隔离级别下,未提交变更对其他事务也是不可见的, MySQL 的默认级别。 避免了“脏读”和“不可重复读”,但不能避免“幻读”。 串行化: serializable ,对于同一行记录,“写”会加“写锁”,“读”会加“读锁”

Spring事务管理--[基于XML的配置]

一曲冷凌霜 提交于 2020-03-30 00:21:28
我觉得自己写的不好,所以先贴一个写的好的帖子 感觉看完不用回来了。。。。 这是一个大佬写的的博客 : https://www.cnblogs.com/yixianyixian/p/8372832.html 第一:JavaEE 体系进行分层开发,事务处理位于业务层,Spring 提供了分层设计 业务层 的事务处理解决方 案。 第二:spring 框架为我们提供了一组事务控制的接口。具体在后面的第二小节介绍。这组接口是在 spring-tx-5.0.2.RELEASE.jar 中。 第三:spring 的事务控制都是基于 AOP 的,它既可以使用编程的方式实现,也可以使用配置的方式实现。我 们学习的重点是使用配置的方式实现。 API 介绍 PlatformTransationManager Spring提供了一个事务管理器接口 PlatformTransationManager ,该接口包含了三个方法: getTransation()//提交事务 commit();//提交事务 rollback();//回滚事务 在开发中,根据应用的技术不同,使用不同的实现类 SpringJDBC / iBatis:org.springframework.jdbc.datasource. DataSourceTransactionManager Hibernate:org

NodeJs mysql 开启事务

房东的猫 提交于 2020-03-28 12:55:10
如题;node后台使用mysql数据库,并使用事务来管理数据库操作。 这里主要讲一个事务的封装并写了一个INSERT 插入操作。 code: 基础code: db.config.js const mysql = require('mysql') const pool = mysql.createPool({ connectionLimit: 20, //连接池连接数 host: 'localhost', //数据库地址,这里用的是本地 database: 'xxxx', //数据库名称 user: 'xxxxx', // username password: '*****' // password }) //返回一个Promise链接 const connectHandle = () => new Promise((resolve, reject) => { pool.getConnection((err, connection) => { if(err) { console.error('链接错误:' + err.stack + '\n' + '链接ID:' + connection.threadId) reject(err) } else { resolve(connection) } }) }) module.exports = connectHandle 事务操作

MySQL存储引擎介绍

狂风中的少年 提交于 2020-03-28 07:43:50
一 存储引擎解释   首先确定一点,存储引擎的概念是MySQL里面才有的,不是所有的关系型数据库都有存储引擎这个概念,后面我们还会说,但是现在要确定这一点。     在讲清楚什么是存储引擎之前,我们先来个比喻,我们都知道录制一个视频文件,可以转换成不同的格式,例如mp4,avi,wmv等,而存在我们电脑的磁盘上也会存在于不同类型的文件系统中如windows里常见的ntfs、fat32,存在于linux里常见的ext3,ext4,xfs,但是,给我们或者用户看懂实际视频内容都是一样的。直观区别是,占用系统的空间大小与清晰程度可能不一样。 那么数据库表里的数据存储在数据库里及磁盘上和上述的视频格式及存储磁盘文件的系统格式特征类似,也有很多种存储方式。   但是对于用户和应用程序来说同样一张表的数据,无论用什么引擎来存储,用户能够看到的数据是一样的。不同储引擎存取,引擎功能,占用空间大小,读取性能等可能有区别。说白了,存储引擎就是在如何存储数据、提取数据、更新数据等技术方法的实现上,底层的实现方式不同,那么就会呈现出不同存储引擎有着一些自己独有的特点和功能,对应着不同的存取机制。   因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即:对表的存储、操作等的实现方法不同),表是什么,表本质上就是磁盘上的文件。   其实MySQL支持多种存储引擎

mysql常见面试题目

北城余情 提交于 2020-03-28 04:48:47
1, mysql的复制原理以及流程。 (1)先问基本原理流程,3个线程以及之间的关联。 (2)再问一致性,延时性,数据恢复。 (3)再问各种工作遇到的复制bug的解决方法 2,mysql中myisam与innodb的区别,至少5点。 (1) 问5点不同 1>.InnoDB支持事物,而MyISAM不支持事物 2>.InnoDB支持行级锁,而MyISAM支持表级锁 3>.InnoDB支持MVCC, 而MyISAM不支持 4>.InnoDB支持外键,而MyISAM不支持 5>.InnoDB不支持全文索引,而MyISAM支持。(X) (2) 问各种不同mysql版本的2者的改进 (3)2者的索引的实现方式 3,问mysql中varchar与char的区别以及varchar(50)中的30代表的涵义。 (1)varchar与char的区别 char是一种固定长度的类型,varchar则是一种可变长度的类型 (2)varchar(50)中50的涵义 最多存放50个字符 (3)int(20)中20的涵义 int(M)中的M indicates the maximum display width (最大显示宽度)for integer types. The maximum legal display width is 255. (4)为什么MySQL这样设计? 4

Spring 框架系列之事务管理

筅森魡賤 提交于 2020-03-27 22:21:08
1、事务回顾 (1)、什么是事务: 事务是逻辑上的一组操作,组成这组操作的各个逻辑单元,要么一起成功,要么一起失败。 (2)、事务特性(ACID) 原子性 :强调事务的不可分割 一致性 :事务的执行的前后数据的完整性保持一致 隔离性 :一个事务执行的过程中,不应该受到其他事务的干扰 持久性 :事务一旦结束,数据就持久到数据库 (3)、事务并发安全性问题 脏读 :一个事务读到了另一个事务的未提交的数据 不可重复读 :一个事务读到了另一个事务已经提交的 update 的数据导致多次查询结果不一致 幻读 :一个事务读到了另一个事务已经提交的 insert 的数据导致多次查询结果不一致 (4)、事务隔离级别 未提交读 :脏读,不可重复读,幻读都有可能发生 已提交读 :避免脏读,但是不可重复读和幻读有可能发生 可重复读 :避免脏读和不可重复读,但是幻读有可能发生 串行化 :避免以上所有读问题 (5)、常见数据库默认事务隔离级别 MySQL:可重复读 Oracle:读已提交 2、Spring 事务管理 (1)、基本事务操作 打开事务 提交事务 回滚事务 (2)、事务操作对象 Spring 事务管理中提供了 PlatformTransactionManager 接口操作事务,其中最为核心的对象是 TransactionManager 对象。 (3)、Spring 事务隔离级别 读未提交 读已提交

事务的四大特性和隔离级别

馋奶兔 提交于 2020-03-27 18:30:51
1.事务的四大特性(ACID): 指数据库事务正确执行的四个基本要素的缩写。包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。一个支持事务(Transaction)的数据库,必需要具有这四种特性,否则在事务过程(Transaction processing)当中无法保证数据的正确性,交易过程极可能达不到交易方的要求。 1.1 原子性(Atomicity) 第一个原子性,这个是最简单的。说的是一个事物内所有操作共同组成一个原子包,要么全部成功,要么全部失败。这是最基本的特性,保证了因为一些其他因素导致数据库异常,或者宕机。 1.2 一致性(Consistency) 第二一致性,这个是大家误解最深的,很多博客都喜欢用银行转账的例子来讲一直性,所谓的一致性是基于原子性。 原子性只保证了一个事物内的所有操作同一性,大家同生死,不会出现你死了,我还活着。但是,原子性并没有保证大家同一时刻一起生,一起死。计算机指令是有先后顺序的,这样就决定了一个事物的提交,会经历一个时间过程,那么如果事物提交进行到了一半,我读取了数据库,会不会读到中间结果? 为了防止这样的情况,数据库事物的一致性就规定了事物提交前后,永远只可能存在事物提交前的状态和事物提交后的状态,从一个一致性的状态到另一个一致性状态,而不可能出现中间的过程态

数据库的四大特性及事务的隔离级别

若如初见. 提交于 2020-03-27 18:27:37
  如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity)   原子性试纸事务包含所有的操作要么全部成功,要么全部失败回滚,事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对是数据库有任何影响。 ⑵ 一致性(Consistency)   一致性是指事务必须使数据库从一个一致性的状态转为为另一个一致性的状态,也就是说一个事务执行之前和执行之后都必须处于一致性的状态。   比如银行转账,加上A用户和B用户两者账户的钱一共有500,那么不管A用户和B用户之间如何转账,事务结束之后两个用户的钱加起来还是500,这就是事务的一致性。 ⑶ 隔离性(Isolation)   隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。   即要达到这么一种效果:对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前就已经结束,要么在T1结束之后才开始,这样每个事务都感觉不到有其他事务在并发地执行。   关于事务的隔离性数据库提供了多种隔离级别,稍后会介绍到。 ⑷ 持久性(Durability)   持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。  

MySQL涉及锁的问题

给你一囗甜甜゛ 提交于 2020-03-27 16:12:37
如何并发的访问数据库呢?答案就是 加锁 。 接下来说一下, 数据库的锁机制,数据库中都有哪些锁?    首先呢,锁是一种 并发控制技术 ,锁是用来在多个用户同时访问同一个数据的时候保护数据的。 有2种基本的锁类型:    共享(S)锁: 多个事务可封锁一个共享页;任何事务都不能修改该页;通常是该页被读取完毕,S锁立即被释放。在执行select语句的时候需要给操作对象(表或一些记录)加上共享锁,但加锁之前需要检查是否有排他锁,如果没有,则可以加共享锁(一个对象上可以加N个共享锁),否则不行。共享锁通常在执行完select语句之后被释放,当然也可能是在事务结束(包括正常结束和异常结束)的时候被释放,主要取决与数据库所设置的事务隔离级别。    排它(X)锁: 仅允许一个事务封锁此页;其他任何事务必须等到X锁被释放才能对该页进行访问;X锁一直到事务结束才能被释放。执行insert、update、delete语句的时候需要给操作的对象加排它锁,在加排他锁之前必须确认该对象上没有其他任何锁,一旦加上排它锁之后,就不能再给这个对象加其他任何锁。排它锁的释放通常是在事务结束的时候(当然也有例外,就是在数据库事务隔离级别被设置为Read Uncommitted(读未提交数据)的时候,这种情况下排他锁会在执行完更新操作之后被释放,而不是在事务结束的时候)。 按锁的机制 既然使用了锁