事务隔离级别

mysql 的事务

£可爱£侵袭症+ 提交于 2020-01-28 21:04:19
mysql 的事务管理 一、事务的基础介绍 概念: 事务Transactions:一组原子性的SQL语句,或一个独立工作单元 事务日志:记录事务信息,实现undo,redo等故障恢复功能 事务的ACID特性 A:atomicity原子性;整个事务中的所有操作要么全部成功执行,要么全部 失败后回滚 C:consistency一致性;数据库总是从一个一致性状态转换为另一个一致性 状态 I:Isolation隔离性;一个事务所做出的操作在提交之前,是不能为其它事务 所见;隔离有多种隔离级别,实现并发 D:durability持久性;一旦事务提交,其所做的修改会永久保存于数据库中 二、事务的管理 启动事务: BEGIN BEGIN WORK START TRANSACTION 结束事务: COMMIT:提交 ROLLBACK: 回滚 注意:只有事务型存储引擎中的DML语句方能支持此类操作 自动提交:set autocommit={1|0} 默认为1,为0时设为非自动提交 建议:显式请求和提交事务,而不要使用“自动提交”功能 事务支持保存点:savepoint 类似快照的作用,但是事务一提交就失效了 设置事务保存点 SAVEPOINT identifier MariaDB [ hellodb ] > savepoint b5 ; Query OK , 0 rows affected ( 0

hibernate整理

泪湿孤枕 提交于 2020-01-28 17:19:24
国外框架项目地址:http://websystique.com/springmvc/spring-mvc-4-angularjs-example/Angularjs文本输入框用ng-moduel,其他的用{{ }}放行用.*?Angularjs插件地址http://www.cnblogs.com/pilixiami/p/5634405.htmlUI班的教程:http://pan.baidu.com/share/link?shareid=4146906997&uk=866705889非严格读写是并发的概念Spring不支持多线程Flush()强制要求缓存与数据库一致Eache表连接,lazy子查询ORM: 编写程序时,以面向对象的方式处理数据 保存数据时是以关系型数据库的方式存储的Hibernate的数据持久化: New实例化对象时默认是瞬时的 Jdbc连接数据库时,持久化数据 将数据存入硬盘单向关联关系: 一个类单方向包含另一个类为属性,模拟数据库外键mysql数据库附加:String driver=com.mysql.jdbc.DriverString url=jdbc:mysql://localhost:3306/demohibernate注入: 实体类(1)这个表示一个实体类,Table表示对应数据库中的表名。@Entity@Table(name="t_emp")(2

MySQL 事务

时间秒杀一切 提交于 2020-01-28 16:05:34
银行引用是事务的一个经典例子:假如银行有两张表,一张支票表,一张储蓄表,现在需要从Jones用户的支票账户转移200¥ 至储蓄账户,那么至少需要三步: 1. 检查Jones的支票账户余额是否大于200¥ 2. Jones的支票账户-200¥ 3. Jones的储蓄账户+200¥ 上述三步可组成一个事务,当2、3步故障时,之前执行的操作会自动回滚,保证数据的一致性。 一、MySQL事务 MySQL事务是一组SQL语句或一个独立运行的工作单元并且满足ACID测试。 ACID测试: A.atomicity,原子性,一个事务必须作为不可分割的最小单元,事务中的语句要么都执行成功,要么都执行失败。 C.consistency,一致性,数据库总是从一个一致性状态到另一个一致性状态(数据库的结果是一致的,所有事务中SQL语句共同修改后的结果)不可能因为系统奔溃出现上述支票表-200¥而储蓄表未+200¥,未提交的事务并不会保存至数据库中。 I. isolation ,隔离性,当前事务操作过程对于另一个线程事务的可见度,由隔离级别决定。 D. durability , 持久性 , 所有事务提交后都永久存放于数据库中。 隔离级别: 1. READ UNCOMMITTED (读未提交) 2. READ COMMITTED(读提交) 3. REPEATEABLE READ(可重复读) 4.

MySQL数据库(六)—— 事务

孤人 提交于 2020-01-28 14:03:54
一、事务的基本特征 1. 概念:如果一个包含多个步骤的业务操作,被事务管理,这些操作要么同时成功,要么同时失败。 事务执行是一个整体,所有的SQL语句都必须执行成功。如果其中有一条SQL语句出现异常,则所有的SQL语句都要回滚,整个业务执行失败。 2. 操作: (1) 开启事务:start transaction (2) 回滚:rollback (3) 提交:commit 3.MySQL数据库中事务默认自动提交 事务提交的两种方式: 第一种方式:自动提交 MySQL就是自动提交的。 一条DML语句会自动提交一次事务。 第二种方式:手动提交 Oracle数据库默认是手动提交事务的。 需要先开启事务,在提交。 4.修改事务的默认提交方式: 查看事务的默认提交方式: SQL语句:select @@autocommit; 结果:1代表自动提交;0代表手动提交 修改事务默认提交方式SQL语句为:set @@autocommit = 0; 这时写了DML语句,不写commit是不会生效的。 二、事务的四大特征(ACID) 原子性(Atomicity):事务是一个不可分割的最小单元,要么全部成功提交,要么全部失败回滚。失败回滚的事务,将不能对事物有任何影响。 一致性(Consistency):一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态

数据库MySQL-InnoDB参数配置

佐手、 提交于 2020-01-28 03:03:23
3、配置InnoDB的几个变量 1、innodb_buffer_pool_size 对于InnoDB表来说, innodb_buffer_pool_size 的作用就相当于key_buffer_size对于MyISAM表的作用一样。InnoDB使用该参数指定大小的内存来缓冲数据和索引。对于单独的MySQL数据库服务器,最大可以把该值设置成物理内存的80%。 根据MySQL手册,对于2G内存的机器,推荐值是1G(50%)。 show status like 'innodb%'; 2、innodb_flush_log_at_trx_commit 主要控制了innodb将log buffer中的数据写入日志文件并flush磁盘的时间点,取值分别为0、1、2三个。0,表示当事务提交时,不做日志写入操作,而是每秒钟将log buffer中的数据写入日志文件并flush磁盘一次;1,则在每秒钟或是每次事物的提交都会引起日志文件写入、flush磁盘的操作,确保了事务的ACID;设置为2,每次事务提交引起写入日志文件的动作,但每秒钟完成一次flush磁盘操作。 实际测试发现,该值对插入数据的速度影响非常大,设置为2时插入10000条记录只需要2秒,设置为0时只需要1秒,而设置为1时则需要229秒。因此,MySQL手册也建议尽量将插入操作合并成一个事务,这样可以大幅提高速度。 根据MySQL手册

MySQL 事务与锁详解

吃可爱长大的小学妹 提交于 2020-01-27 17:15:22
1 什么是数据库的事务? 1.1 事务的典型场景 比如下单,会操作订单表,资金表,物流表等等,这个时候我们需要让这些操作都 在一个事务里面完成。在金融的系统里面事务配置是很常见的,比如行内转账的这种操 作,如果我们把它简单地理解为一个账户的余额增加,另一个账户的余额减少的情况(当 然实际上要比这复杂),那么这两个动作一定是同时成功或者同时失败的。 1.2 事务的定义 维基百科的定义:事务是数据库管理系统(DBMS)执行过程中的一个逻辑单位,由 一个有限的数据库操作序列构成。 这里面有两个关键点, 第一个,它是数据库最小的工作单元,是不可以再分的。 第二个,它可能包含了一个或者一系列的 DML 语句,包括 insert delete update。 1.3 哪些存储引擎支持事务 InnoDB 支持事务,这个也是它成为默认的存储引擎的一个重要原因: https://dev.mysql.com/doc/refman/5.7/en/storage-engines.html 另一个是 NDB。 1.4 事务的四大特性 第一个,原子性,Atomicity,也就是我们刚才说的不可再分,也就意味着我们对数 据库的一系列的操作,要么都是成功,要么都是失败,不可能出现部分成功或者部分失 败的情况,以刚才提到的转账的场景为例,一个账户的余额减少,对应一个账户的增加, 这两个一定是同时成功或者同时失败的。

MySQL事务的隔离级别

老子叫甜甜 提交于 2020-01-26 23:03:11
如果不考虑隔离性,引发一些安全问题 隔离性:一个事务的执行,不应该受到其他事务的干扰。 如果不考虑隔离性(一个事务执行受到其他的事务的干扰),引发一些安全问题,主要体现在读取数据上: 脏读:一个事务读到了另一个事务未提交的数据,导致查询结果不一致 不可重复读:一个事务读到了另一个事务已经提交的update的数据,导致多次查询结果不一致。 虚读/幻读:一个事务读到了另一个事务已经提交的insert的数据,导致多次查询结果不一致。 解决这些安全性问题: 设置事务的隔离级别: read uncommitted :脏读,不可重复读,虚读都有可能发生 read committed :避免脏读。但是不可重复读和虚读是有可能发生 repeatable read :避免脏读和不可重复读,但是虚读有可能发生。 serializable :避免脏读,不可重复读,虚读。 来源: CSDN 作者: 学亮编程手记 链接: https://blog.csdn.net/a772304419/article/details/104089094

my39_InnoDB锁机制之Gap Lock、Next-Key Lock、Record Lock解析

自古美人都是妖i 提交于 2020-01-26 21:22:16
MySQL InnoDB支持三种行锁定方式: 行锁(Record Lock):锁直接加在索引记录上面,锁住的是key。 间隙锁(Gap Lock): 锁定索引记录间隙,确保索引记录的间隙不变。间隙锁是针对事务隔离级别为可重复读或以上级别而已的。 Next-Key Lock :行锁和间隙锁组合起来就叫Next-Key Lock。 默认情况下,InnoDB工作在可重复读隔离级别下,并且会以Next-Key Lock的方式对数据行进行加锁,这样可以有效防止幻读的发生。 Next-Key Lock是行锁和间隙锁的组合,当InnoDB扫描索引记录的时候,会首先对索引记录加上行锁(Record Lock),再对索引记录两 边的间隙加上间隙锁(Gap Lock)。加上间隙锁之后,其他事务就不能在这个间隙修改或者插入记录。 Gap Lock在InnoDB的唯一作用就是防止其他事务的插入操作,以此防止幻读的发生。 行锁(Record Lock) 行锁锁定的是索引记录,而不是行数据,也就是说锁定的是key。 间隙锁(Gap Lock) 例如: create table test(id int,v1 int,v2 int,primary key(id),key `idx_v1`(`v1`))Engine=InnoDB DEFAULT CHARSET=UTF8; insert into test

select for update引发死锁分析

一世执手 提交于 2020-01-26 20:22:48
本文针对MySQL InnoDB中在Repeatable Read的隔离级别下使用select for update可能引发的死锁问题进行分析。 1. 业务案例 业务中需要对各种类型的实体进行编号,例如对于x类实体的编号可能是x201712120001,x201712120002,x201712120003类似于这样。可以观察到这类编号有两个部分组成:x+日期作为前缀,以及流水号(这里是四位的流水号)。 如果用数据库表实现一个能够分配流水号的需求,无外乎就可以建立一个类似于下面的表: CREATE TABLE number ( prefix VARCHAR(20) NOT NULL DEFAULT '' COMMENT '前缀码', value BIGINT NOT NULL DEFAULT 0 COMMENT '流水号', UNIQUE KEY uk_prefix(prefix) ); 那么在业务层,根据业务规则得到编号的前缀比如x20171212,接下去就可以在代码中起事务,用select for update进行如下的控制。 @Transactional long acquire(String prefix) { SerialNumber current = dao.selectAndLock(prefix); if (current == null) { dao

事务隔离级别

无人久伴 提交于 2020-01-26 20:07:45
1、什么是事务:    事务是逻辑上的一组操作,要么都执行,要么都不执行。   例如:银行转账,A转账1000元给B,这个转账就涉及到两个操作:将A余额减去1000元,将B余额加上1000元。但是外一在转账的过程中银行的系统奔溃,导致A只减了,B没有加,这样就出错了。事务就是要保证这两个操作,要么都成功,要么都失败。 2、事物的特性: (1)原子性:原子性是指一个事务必须被视为一个不可分割的最小工作单元,只有事务中所有的数据库操作都执行成功,才算整个事务执行成功,事务中如果有任何一个 (2)一致性: 在一个事务执行之前和执行之后数据库都必须处于一致性状态。假如数据库的状态满足所有的完整性约束,就说该数据库是一致的。 (3)隔离性:并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的; (4)持久性:一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。 来源: https://www.cnblogs.com/guoyu1/p/12234664.html