事务

数据库 -- 存储引擎介绍

孤人 提交于 2020-02-05 06:13:48
mysql引擎介绍 1,概念   mysql5.6支持的存储引擎包括InnoDB、MyISAM、MEMORY、CSV、BLACKHOLE、FEDERATED、MRG_MYISAM、ARCHIVE、PERFORMANCE_SCHEMA。其中NDB和InnoDB提供事务安全表,其他存储引擎都是非事务安全表。 mysql支持的存储引擎 MySQL服务器采用了多层设计和独立模块,插件式存储引擎体系结构,允许将存储引擎加载到正在运新的MySQL服务器中,图中的Pluggable Storage Engines部分。采用MySQL服务器体系结构,由于在存储级别上(也就是Pluggable Storage Engines)提供了一致和简单的应用模型和API,应用程序编程人员和DBA可不再考虑所有的底层实施细节。因此,尽管不同的存储引擎具有不同的能力,应用程序是与之分离的。存储引擎就司职与文件系统打交道了。 并发性:某些应用程序比其他应用程序具有很多的颗粒级锁定要求(如行级锁定)。 事务支持:并非所有的应用程序都需要事务,但对的确需要事务的应用程序来说,有着定义良好的需求,如ACID兼容等。 引用完整性:通过DDL定义的外键,服务器需要强制保持关联数据库的引用完整性。 物理存储:它包括各种各样的事项,从表和索引的总的页大小,到存储数据所需的格式,到物理磁盘。 索引支持

MySQL出现Waiting for table metadata lock的原因以及解决方法

被刻印的时光 ゝ 提交于 2020-02-04 21:26:42
MySQL在进行alter table等DDL操作时,有时会出现Waiting for table metadata lock的等待场景。而且, 一旦alter table TableA的操作停滞在Waiting for table metadata lock的状态,后续对TableA的任何操作(包括读)都无法进行,因为他们也会在Opening tables的阶段进入到Waiting for table metadata lock的锁等待队列 。如果是产品环境的核心表出现了这样的锁等待队列,就会造成灾难性的后果。 造成alter table产生Waiting for table metadata lock的原因其实很简单,一般是以下几个简单的场景: 场景一:长事物运行,阻塞DDL,继而阻塞所有同表的后续操作 show processlist 可以看到TableA上有正在进行的操作(包括读),此时alter table语句无法获取到metadata 独占锁,会进行等待。该表上的后续操作都被阻塞。 这是最基本的一种情形,这个和mysql 5.6中的online ddl并不冲突。一般alter table的操作过程中(见下图),在after create步骤会获取metadata 独占锁,当进行到altering table的过程时(通常是最花时间的步骤),对该表的读写都可以正常进行

MySQL出现Waiting for table metadata lock的原因以及解决方法

╄→尐↘猪︶ㄣ 提交于 2020-02-04 21:25:34
转自:http://ctripmysqldba.iteye.com/blog/1938150 (有修改) MySQL在进行alter table等DDL操作时,有时会出现Waiting for table metadata lock的等待场景。而且,一旦alter table TableA的操作停滞在Waiting for table metadata lock的状态,后续对TableA的任何操作(包括读)都无法进行,因为他们也会在Opening tables的阶段进入到Waiting for table metadata lock的锁等待队列。如果是产品环境的核心表出现了这样的锁等待队列,就会造成灾难性的后果。 造成alter table产生Waiting for table metadata lock的原因其实很简单,一般是以下几个简单的场景: 场景一:长事物运行,阻塞DDL,继而阻塞所有同表的后续操作 通过show processlist可以看到TableA上有正在进行的操作(包括读),此时alter table语句无法获取到metadata 独占锁,会进行等待。 这是最基本的一种情形,这个和mysql 5.6中的online ddl并不冲突。一般alter table的操作过程中(见下图),在after create步骤会获取metadata 独占锁

spring 面试问题

℡╲_俬逩灬. 提交于 2020-02-04 18:26:17
spring bean 的作用域 1.singleton:唯一bean实例,Spring中的bean默认都是单例的。 2.prototype:每次请求都会创建一个新的bean实例。 3.request:每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP request内有效。 4.session:每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP session内有效。 spring mvc 的工作流程 一个请求→DispatcherServlet根据请求信息调用HandlerMapping→转发到固定handler上即Controller→处理完业务后返回ModelAndView对象→DispatcherServlet把返回的Model传给View 最后返回浏览器。 spring 当中的设计模式 单例 工厂(BeanFactory) 代理 springaop(面向切面代理接口)适配器模式(springmv分配hanglermapping) 装饰模式 给类添加额外职责(Decorator) 观察者模式(spring驱动事件) 策略模式(访问resource接口 不同的 resource) 模板模式 spring 控制事务的几种方式 1编程式事务管理对基于 POJO 的应用来说是唯一选择。我们需要在代码中调用beginTransaction()

InnoDB的事务和锁——事务到底是隔离的还是不隔离的?

瘦欲@ 提交于 2020-02-04 18:02:06
参考文章: https://time.geekbang.org/column/article/70562 目录 引例 1、表结构 2、事务执行流程 3、事务启动方式 4、“视图”概念 “快照”在 MVCC 里是怎么工作的? 1、行状态变更及多版本 2、可重复读 3、一致性视图 4、数据版本的可见性规则 4、事务A返回的结果为什么是k=1? 判断方式一:利用数据版本的可见性规则 判断方式二:时间先后顺序判断 更新逻辑 假设事务 C 不是马上提交的,而是变成了下面的事务 C’,会怎么样呢? 事务的可重复读的能力是怎么实现的? 在读提交隔离级别下,结果如何? 引例 1、表结构 一个事务要更新一行,如果刚好有另外一个事务拥有这一行的行锁,它又不能这么超然了,会被锁住,进入等待状态。问题是,既然进入了等待状态,那么等到这个事务自己获取到行锁要更新数据的时候,它读到的值又是什么呢? CREATE TABLE `t` ( `id` int(11) NOT NULL, `k` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB; insert into t(id, k) values(1,1),(2,2); 2、事务执行流程 图 1 事务 A、B、C 的执行流程 可重复读隔离级别下:【 事务 B 查到的 k 的值是 3,而事务 A

MongoDB CRUD的概念

给你一囗甜甜゛ 提交于 2020-02-04 16:53:10
一、原子性和事务 1.原子性 在MongoDB中,写操作是单个文档级别上的原子操作,即使该操作修改了单个文档中的多个嵌入文档。 2.多文档事务 当单个写操作(例如db.collection.updateMany())修改多个文档时,对每个文档的修改是原子性的,但整个操作不是原子性的。 在执行多文档写操作时,无论是通过单个写操作还是多个写操作,其他操作可能会交错进行。 对于需要对多个文档进行原子性读写的情况(在单个或多个集合中),MongoDB支持多文档事务: 在4.0版本中,MongoDB支持副本集上的多文档事务。 在版本4.2中,MongoDB引入了分布式事务,它在sharded集群上添加了对多文档事务的支持,并合并了对副本集上多文档事务的现有支持。 有关MongoDB事务的详细信息,请参阅事务页面。 重要: 在大多数情况下,与单个文档写入相比,多文档事务会带来更大的性能成本,而且多文档事务的可用性不应该代替有效的模式设计。对于许多场景,非规范化数据模型(嵌入文档和数组)对于您的数据和用例仍然是最优的。也就是说,对于许多场景,适当地对数据建模将最小化对多文档事务的需求。 有关其他事务使用注意事项(如运行时限制和oplog大小限制),请参见生产注意事项。 3. 并发控制 并发控制允许多个应用程序并发运行,而不会导致数据不一致或冲突。 一种方法是在只能具有唯一值的字段上创建惟一的索引

Spring整合Mybatis

泄露秘密 提交于 2020-02-04 02:37:57
  Spring整合Mybatis成功,也就是service能成功调用dao执行web层要求的操作。而service已经放在IOC容器中,如果service能在IOC容器中拿到dao的对象,那么就能调用。 学习Mybatis时,使用Mybatis框架后,我们要对数据库进行操作时,不再创建持久层接口的是实现类,而是使用代理对象的方式,如下: //1.读取配置文件 InputStream in = Resources . getResourceAsStream ( "SqlMapConfig.xml" ) ; //2.创建 SqlSessionFactory 的构建者对象 SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder ( ) ; //3.使用构建者创建工厂对象 SqlSessionFactory SqlSessionFactory factory = builder . build ( in ) ; //4.使用 SqlSessionFactory 生产 SqlSession 对象 SqlSession session = factory . openSession ( ) ; //5.使用 SqlSession 创建 dao 接口的代理对象 IUserDao userDao = session .

数据库:事务

你离开我真会死。 提交于 2020-02-03 21:23:30
1. 什么是事务? 事务是对数据库中一系列操作进行统一回滚或者提交的操作,主要用来保证数据的完整性和一致性。 2. 事务四大特性(ACID)原子性、一致性、隔离性、持久性? 2.1 原子性(Atomicity):   原子性是指事物包含的所有操作要么全部成功,要么全部失败回滚,因此事物的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。 2.2 一致性(Consisitency):   事物开始前和结束后,数据库的完整性约束没有被破坏。比如A向B转账,不可能A扣了钱,B却没收到。 2.3 隔离性(Isolation):   隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他的事物所干扰,多个并发事务之间要相互隔离。同一时间,只允许一个事务请求同一数据,不同事务之间彼此没有任何干扰。比如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账。 2.4 持久性(Durability):   持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。 3. 事务的并发? 3.1 脏读: 事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据就是脏数据。 3.2 不可重复读: 事务A多次读取同一数据

Transactional详细信息

孤者浪人 提交于 2020-02-03 21:21:50
Transactional能入的值 isolation:事务的隔离级别 propagation:事务的传播行为 noRollbackFor:哪些异常事务可以不回滚(输入类型) noRollbackForClassName:哪些异常事务可以不回滚(输入全类名) rollbackFor:哪些异常事务需要回滚(输入类型) rollbackForClassName:哪些异常事务需要回滚(输入全类名) readOnly:设置事务只读 (默认为false)这个属性只能够使用在查询sql中。 timeout:事务超出指定时间后进行回滚(以秒为单位) 此文章就展示项目架构了项目架构请看 此文章 案例 timeout 案例 错误提示 readOnly 案例 错误提示 PreparedStatementCallback; SQL [update balance set price = price - ? where name= ?]; Connection is read-only. Queries leading to data modification are not allowed; nested exception is java.sql.SQLException: Connection is read-only. Queries leading to data modification