数据库事务

对事务的特性ACID的理解

家住魔仙堡 提交于 2020-01-26 17:40:57
对事务的特性ACID的理解 数据库的事务必须具备ACID特性,ACID是指 Atomicity(原子性)、Consistensy(一致性)、Isolation(隔离型)和Durability(持久性)的英文缩写。 1、 原子性(Atomicity ) 事务包装的一组sql ,要么都执行成功,要么都失败。这些操作是不可分割的。 2、 一致性(Consistency ) 数据库的数据状态是一致的。 事务的成功与失败,最终数据库的数据都是符合实际生活的业务逻辑。一致性绝大多数依赖业务逻辑和原子性。 3、 持久性:( Durability ) 事务成功提交之后,对于数据库的改变是永久的。哪怕数据库发生异常,重启之后数据亦然存在。 4、 隔离性(Isolation ) 一个事务的成功或者失败对于其他的事务是没有影响。2 个事务应该相互独立。 事务的隔离级别 如果不考虑事务的隔离性,由于事务的并发,将会出现以下问题: 1、脏读 -- 最严重,杜绝发生 2、不可重复读 3、幻读(虚读) 脏读:指一个事务读取了另外一个事务 未提交的数据。 一个事务读取了另一个事务没有提交的数据,非常严重。应当尽量避免脏读。 不可重复读:在一个事务内多次读取表中的数据,多次读取的结果不同。 幻读(虚读) 隔离级别:如何解决问题 l 数据库规范规定了4种隔离级别,分别用于描述两个事务并发的所有情况。 read

MySQL 常见的两种存储引擎

纵然是瞬间 提交于 2020-01-26 14:26:46
  MySQL两种常见的存储引擎有:MyISAM 和 InnoDB,两者区别如下: 1、count运算:MyISAM 有缓存表的 meta-data 元数据,元数据包括行数等,因此其做 COUNT(*) 查询时不需要消耗多少资源。而 InnoDB 就没有这个缓存。 2、事务和崩溃后的安全恢复:MyISAM强调的是性能,每次查询具备原子性,执行速度比 InnoDB 更快,但是 MyISAM 不提供事务的支持。而 InnoDB 支持事务、外部键等高级数据库功能。具有事务提交(commit)、回滚(rollback)和崩溃修复(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。 3、支持外键:InnoDB支持,MyISAM 不支持。   MyISAM更适合读密集的表,而InnoDB更适合写密集的的表。 在数据库做主从分离的情况下,经常选择MyISAM作为主库的存储引擎。 一般来说,如果需要事务支持,并且有较高的并发读取频率(MyISAM的表锁的粒度太大,所以当该表写并发量较高时,要等待的查询就会很多了),InnoDB是不错的选择。如果你的数据量很大(MyISAM支持压缩特性可以减少磁盘的空间占用),而且不需要支持事务时,MyISAM是最好的选择。 来源: https://www.cnblogs

MySQL8.0新特性【转】

China☆狼群 提交于 2020-01-26 11:50:32
Server层,选项持久化 mysql> show variables like '%max_connections%'; +------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | max_connections | 512 | | mysqlx_max_connections | 100 | +------------------------+-------+ 2 rows in set (0.00 sec) mysql> set persist max_connections=8000; Query OK, 0 rows affected (0.00 sec) mysql> show variables like '%max_connections%'; +------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | max_connections | 8000 | | mysqlx_max_connections | 100 | +------------------------+-------+ 2 rows

MySQL事务和锁的相关概念

断了今生、忘了曾经 提交于 2020-01-26 11:38:47
大家肯定都打过游戏,对于一个游戏通关来说,通了就是通了,没通就是没通。 那对于事务来讲,一组 SQL 语句全部执行成功才是成功,只要有一个 SQL 语句执行失败,整个就崩掉了。 1)事务的概念 2)事务的特性 3)事务的隔离级别 4)锁 5)一些事务相关的 SQL 语句 6) MySQL 中常使用的引擎 1、什么是事务 事务是有一条或者是多条对数据库操作的SQL组成的一个不可分割的单元, 只有当事务中的所有的操作都正常执行时,整个事务才提交给数据库 1)事务是一组SQL语句的执行,要么全部执行成功,要么全部执行失败, 不能出现部分成功和失败,保证原子操作 2)事务中所有的数据执行成功,才能提交( commit )事务,把结果写入磁盘 3)事务在执行过程中,有的SQL出现了错误,那么事务必须回滚( rollback ) 到最初的状态 当一个事务正确提交后,那个值才会刷新到磁盘上。 2、事务的一些性质 事务的ACID特征: 一个事务必须满足以下4个特征: A(Atomic):原子性 事务是一个不可分割的整体,事务必须具有原子特性,当数据发生变更时,要么全部成功,要么全部失败,不存在部分成功和失败 通关与未通关 C(Consistency):一致性 一个事务的执行前后,数据库中的数据必须保持一致性的特征。 I(Isolation):隔离性 当两个或者多个事务进行并发操作时

148复习前一天的内容

淺唱寂寞╮ 提交于 2020-01-26 09:51:05
一、含义 事务:一条或多条sql语句组成一个执行单位,一组sql语句要么都执行,要么都不执行 二、特点(ACID) A 原子性:一个事务是不可再分割的,要么都执行,要么都不执行 C 一致性:我们的数据是准确的,完整的,可靠的。一个事务可以使数据从一个一致状态,切换到另一个一致状态 I 隔离性:一个事务不受其他事务的干扰,多个事务互相隔离(通过设置隔离级别来隔离) D 持久性:一个事务一旦提交了,则永久的持久化到本地 三、事务的使用步骤 了解: 隐式(自动)事务:没有明显的开启和结束,本身就是一条事务可以自动提交,比如insert、update、delete 显示事务:需要手动提交,具有明显的开始和结束 使用显示事务: ①开启事务 set autocommit=0; 【start transaction;】 --可以省略 ②编写一组逻辑sql语句 注意:sql语句支持的是insert、update、delete 设置回滚点: savepoint 回滚点名; ③结束事务 提交:commit; 回滚:rollback; 回滚到制定的地方:rollback to 回滚点名; 四、并发事务、 1.事务的并发问题是如何发生的? 多个事务 同时 操作 同一个数据库的相同数据时 2.并发问题都有哪些? 脏读:一个事务读取了其他事务还没有提交的数据,读到的是其他事务”更新“的数据 不可重复度

spring整合mybatis

允我心安 提交于 2020-01-26 08:18:47
spring整合mybatis的applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http:

事务并发的可能问题与其解决方案

戏子无情 提交于 2020-01-26 02:47:01
一、事务并发的问题 这些问题可以归结为5类,包括3类数据读问题( 脏读、 不可重复读和 幻象读)以及2类数据更新问题( 第一类丢失更新和 第二类丢失更新) 脏读(dirty read) A事务读取B事务尚未提交的更改数据,并在这个数据的基础上操作。如果恰巧B事务回滚,那么A事务读到的数据根本是不被承认的。来看取款事务和转账事务并发时引发的脏读场景: 在这个场景中,B希望取款500元而后又撤销了动作,而A往相同的账户中转账100元,就因为A事务读取了B事务尚未提交的数据,因而造成账户白白丢失了500元。在Oracle数据库中,不会发生脏读的情况。 不可重复读(unrepeatable read) 不可重复读是指 A事务读取了B事务已经提交的更改数据。 假设A在取款事务的过程中,B往该账户转账100元,A两次读取账户的余额发生不一致: 这个就我自己觉得问题不大,好像也并没有影响什么。 幻象读(phantom read) A事务读取B事务提交的新增数据,这时A事务将出现幻象读的问题。幻象读一般发生在计算统计数据的事务中,举一个例子,假设银行系统在同一个事务中,两次统计存款账户的总金额,在两次统计过程中,刚好新增了一个存款账户,并存入100元,这时,两次统计的总金额将不一致: 如果新增数据刚好满足事务的查询条件,这个新数据就进入了事务的视野,因而产生了两个统计不一致的情况。 不可重复读 和

6. SpringBoot整合Redis

女生的网名这么多〃 提交于 2020-01-26 00:05:39
6. SpringBoot整合Redis Redis是NoSQL类型的数据库,我们也常称为内存型数据库类型.在SpringBoot中使用Redis非常简单. 6.1 添加包依赖 < dependency > < groupId > org.springframework.boot </ groupId > < artifactId > spring-boot-starter-data-redis </ artifactId > </ dependency > < dependency > < groupId > org.apache.commons </ groupId > < artifactId > commons-pool2 </ artifactId > </ dependency > 添加依赖后其实就直接可以使用redis了(SpringBoot提供了默认配置,也可以自己配置) 6.2 配置 spring.redis.host=localhost spring.redis.port=6379 spring.redis.timeout=1000 spring.redis.lettuce.pool.max-active=10 spring.redis.lettuce.pool.max-idle=10 spring.redis.lettuce.pool.min-idle=5

数据库的事务与锁初理解

孤者浪人 提交于 2020-01-25 21:41:02
前沿: 以下内容大多来自以下三篇文章 Mysql事务与锁详解 MySqL 事务与锁的深入学习笔记 Mysql事务实现原理 (很推荐看下) 对于insert、update、delete,InnoDB会自动给涉及的数据加排他锁(X); 对于一般的select语句,InnoDB不会加任何锁 ,事务可以通过以下语句给显式的加共享锁或排他锁。 -- 共享锁: SELECT * from tb_user LOCK IN SHARE MODE ; -- 排他锁: SELECT * from tb_user FOR UPDATE ; 共享锁(S) 排它锁(X) 若某个事物对某一行加上了排他锁,只能这个事务对其进行读写,在此事务结束之前,其他事务不能对其进行 加任何锁 (如何执行的语句没有锁,那么就不会影响, 比如默认的select语句就是没有任何锁的 ),其他进程可以读取,不能进行写操作,需等待其释放。 排它锁是悲观锁的一种实现 执行存储过程,开启事务,但是不提交,即锁一直在 CREATE DEFINER = ` root ` @`localhost` PROCEDURE ` NewProc ` ( ) BEGIN start transaction ; set session transaction isolation level read committed ; SELECT name

对于事务ACID的理解

。_饼干妹妹 提交于 2020-01-25 16:45:40
ACID,即以下四点: 原子性(Atomicity) 原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。 一致性(Consistency) 事务前后数据的完整性必须保持一致。 隔离性(Isolation) 事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。 持久性(Durability) 持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响 理解参考: https://blog.csdn.net/dengjili/article/details/82468576 来源: https://www.cnblogs.com/xc-chejj/p/10872908.html