数据库事务

mysql面试知识点

Deadly 提交于 2020-03-08 10:54:05
1 MyISAM和InnoDB的区别    a 是否支持行级锁 :   MyISAM 只有表级锁 (table-level locking),   而 InnoDB 支持行级锁 (row-level locking)和表级锁,默认为行级锁。    b 是否支持事务和崩溃后的安全恢复:    MyISAM 强调的是性能 ,每次查询具有原子性,其执行速度比InnoDB类型更快,但是不提供事务支持。   但是 InnoDB 提供事务支持事务 ,外部键等高级数据库功能。 具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。    c 是否支持外键:   MyISAM不支持,而InnoDB支持。    d 是否支持MVCC :   仅 InnoDB 支持。应对高并发事务, MVCC比单纯的加锁更高效;MVCC只在 READ COMMITTED 和 REPEATABLE READ 两个隔离级别下工作;MVCC可以使用 乐观(optimistic)锁 和 悲观(pessimistic)锁来实现;各数据库中MVCC实现并不统一。 2 索引   MySQL索引使用的数据结构主要有 BTree索引 和 哈希索 引 。   对于 哈希索引 来说

事务与事务隔离级别

左心房为你撑大大i 提交于 2020-03-08 05:28:49
oracle事务 事务含义:组成单个逻辑单元的一系列操作。 事务特征: 第一、原子性,即不可分割性; 第二、一致性,保证数据更新前后与业务的一致性; 第三、隔离性,多个事务不相影响; 第四、持久性,事务提交后数据将永久存储杂数据库。 隔离级别 : 1.未提交读(read uncommitted):会出现脏读、不可重复读和幻读。脏读的设计只是为了提供非阻塞读,但是对于oracle来说,默认就提供非阻塞读, 即查询不会受到任何增删改操作的影像,因为oracle提供了undo来存放更新前的数据。 2.提交读(read committed):会出现不可重复读和幻读。oracle的默认事务隔离级别。 3.重复读(repeatable read):会出现幻读。 4.串行化(serializable):隔离级别最高,不允许出现脏读、不可重复读和幻读。即一个事务执行结束了另一个事务才能执行。当然并发性也就最差。 除了这四种,oracle还提供read only隔离级别,即只支持读,在该级别中,该事务只能看到事务开始那一刻提交的修改。 脏读、不可重复读、幻读含义 脏读:一个事务可以读物另一个事务未提交的数据。 不可重复读:在一个事务中不同时间段查询出现不同的结果,可能被更新可能被删除。 幻读:在一个事务中不同时间段查询,记录数不同。与不可重复读的区别是:在幻读中,已经读取的数据不会改变

什么导致spring事务失效

大兔子大兔子 提交于 2020-03-07 23:58:58
今天有个朋友问我一个事务不起作用的问题,如果对事务代理不了解的话,这个问题需要引起大家注意。 先看配置文件: <!-- 配置事务拦截器--> <bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor"> <!-- 事务拦截器bean需要依赖注入一个事务管理器 --> <property name="transactionManager" ref="myTransactionManager"/> <property name="transactionAttributes"> <!-- 下面定义事务传播属性--> <props> <!--del开头的方法都被事物管理--> <prop key="update*">PROPAGATION_REQUIRED</prop> <prop key="add*">PROPAGATION_REQUIRED</prop> <prop key="set*">PROPAGATION_REQUIRED</prop> <prop key="del*">PROPAGATION_REQUIRED</prop> <prop key="find*">PROPAGATION_REQUIRED,readOnly<

高性能MySQL之锁详解

╄→尐↘猪︶ㄣ 提交于 2020-03-07 23:03:02
一、背景 MySQL里面的锁大致可以分成全局锁、表级锁和行锁三类。数据库锁的设计的初衷是处理并发问题。我们知道多用户共享资源的时候,就有可能会出现并发访问的时候,数据库就需要合理的控制资源的访问规则,因此,锁就应运而生了,它主要用来实现这些访问规则的重要数据结构。 二、全局锁 顾名思义,全局锁就是对整个数据库实例加锁,可以通过命令 Flush tables with read lock (FTWRL)对整个数据库实例子加锁。让整个库处于只读状态的时候,可以使用这个命令,之后其他线程的以下语句会被阻塞:数据更新语句(数据的增删改)、数据定义语句(包括建表、修改表结构等)和更新类事务的提交语句。 全局锁有一个经典的使用场景就是做全库逻辑备份,也就是说吧整个数据库的每个表都用select 出来存成文本。以前有一种做法是通过FTWRL确保不会有其他线程对数据库做更新,然后对整个库做备份。注意,在备份过程中整个库完全处于只读状态。 你此时是不是觉得很危险? 如果你在主库上备份,那么在备份期间都不能执行更新,业务基本上就得停摆; 如果你在从库上备份,那么备份期间从库不能执行主库同步过来的binlog,会导致主从延迟。 看上去确实很危险,但是我们细想一下,备份为什么要加锁呢?如果我们不加锁又会出现什么问题呢? 假设你现在要维护京东的购买系统,关注的是用户账户余额表和用户商品表。

mysql(视图 事务 索引 外键)

流过昼夜 提交于 2020-03-07 13:06:19
视图 视图本质就是对查询的封装 创建视图(定义视图 起名以v_开头) create view v_students as select classes.name as c_name ,students.* from students inner join classes on students.cls_id=classes.id; 查看视图 select * from v_students; 删除视图 drop view v_students; 事务 事务具有ACID特性: 原子性(A,atomicity) 一致性(C,consistency) 隔离性(I,isolation) 持久性(D,durabulity) 原子性:事务内所有操作要么都执行,要么都不执行,它是一个不可分割的工作单位 例如: A给B转账,不会因为各种原因A账号已经发生扣款而B账户没有收到加款。 一致性:事务开始和结束前后,数据库的完整性没有被破坏 案例: 对银行转帐事务,不管事务成功还是失败,应该保证事务结束后ACCOUNT表中aaa和bbb的存款总额为2000元。 隔离性:事务之间不相互影响,多个事务并发访问时,事务之间是隔离的 事务查看数据更新时,数据所处状态要么是另一事务修改之前或者修改之后的状态,不会查看到中间状态的数据。事务1在修改表的时候提交之前事务2不能修改 持久性:事务完成一手

Python连接MySQL数据库之pymysql模块使用

依然范特西╮ 提交于 2020-03-07 08:23:59
Python连接MySQL数据库之pymysql模块使用 Python3连接MySQL 本文介绍Python3连接MySQL的第三方库--PyMySQL的基本使用。 PyMySQL介绍 PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。 Django中也可以使用PyMySQL连接MySQL数据库。 PyMySQL安装 pip install pymysql 连接数据库 注意事项 在进行本文以下内容之前需要注意: 你有一个MySQL数据库,并且已经启动。 你有可以连接该数据库的用户名和密码 你有一个有权限操作的database 基本使用 # 导入pymysql模块 import pymysql # 连接database conn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”) # 得到一个可以执行SQL语句的光标对象 cursor = conn.cursor() # 定义要执行的SQL语句 sql = """ CREATE TABLE USER1 ( id INT auto_increment PRIMARY KEY , name CHAR(10) NOT NULL UNIQUE

IT忍者神龟之事务ACID理解

↘锁芯ラ 提交于 2020-03-07 05:16:19
事务概念 概念:事务(Transaction),一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。 本人WX:kotlinvip 事务的基本要素(ACID) 1、原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。 2、一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏 。比如A向B转账,不可能A扣了钱,B却没收到。 3、隔离性(Isolation):同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。比如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账。 4、持久性(Durability):事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚 场景举例: 银行转账业务图例解释ACID 原子性 根据业务需求怎么才能满足事务的ACID 请往下看 针对同一个事务流程这个过程包含以下流程: 1:张三账户减去 800 2:李四账户加上200 原子性表示 ,这两个步骤一起成功,或者一起失败,不能只发生其中一个动作这样才能满足原子性。 一致性 操作前张三:1000

Spring 集成 JOTM 的 JTA 事务管理

时光总嘲笑我的痴心妄想 提交于 2020-03-06 15:56:29
Spring 中集成 JOTM 配置 JTA 事务: 假如业务中要用到多个数据库,我们希望在业务方法中,当对某一个数据库的数据表进行操作的事务失败并回退(rollback),另外某一个数据库的数据表的操作事务也要回退,但应用一般的事务管理达不到这样的事务管理效果,这就需要实现 JTA 事务管理了。 这里我们在SPring中集成 Object web 的一个开源JTA实现JOTM (可以在 http://jotm.objectweb.org 下载完整版) 来实现JTA事务管理。 1、将必须的类包放入类路径中: jotm.jar, xapool.jar, jotm_jrmp_stubs.jar, jta-spect1_0_1.jar, connector-1_5.jar等等。 2、编写JOTM配置文件carol.properties,将其放到类路径下: Java代码 #JNDI调用协议 carol.protocols=jrmp #不使用CAROL JNDI封装器 carol.start.jndi= false #不启动命名服务器 carol.start.ns= false #JNDI调用协议 carol.protocols=jrmp #不使用CAROL JNDI封装器 carol.start.jndi=false #不启动命名服务器 carol.start.ns=false 3

Spring Transaction + MyBatis SqlSession事务管理机制研究学习

这一生的挚爱 提交于 2020-03-06 08:57:04
线上的系统中,使用的是Spring+Mybatis+Mysql搭建的框架,由于客户需要,最近一直在对性能提升部分进行考虑,主要是涉及Mysql的一些重要参数的配置学习,以及Spring事务管理机制的学习,因为通过观察服务器日志,发现在这两部分的时候耗时比较严重,特别是进行mysql事务提交的时候,项目源码中使用了Spring的声明式事务,即通过@Transactional注解来控制事务的开启与提交,这两天看了一些关于Spring Transaction事务的一些文章,也debug了源码,总算有点心得和疑问,这里简单的整理一下。 在Spring的配置文件中,我们使用了"org.springframework.jdbc.datasource.DataSourceTransactionManager"对事务进行管理,翻开 DataSourceTransactionManager的源码,我们看到 DataSourceTransactionManager继承了AbstractPlatformTransactionManager(抽象的事务管理器), DataSourceTransactionManager 重写了其中的一些方法,具体每个方法的作用,限于篇幅 ,本文不再赘述 ,这里 《Spring技术内幕》学习笔记16——Spring具体事务处理器的实现 有详细的介绍。 在现有的项目中

分布式事务中常见的三种解决方案

我的梦境 提交于 2020-03-05 19:11:28
一、分布式事务前奏 事务:事务是由一组操作构成的可靠的独立的工作单元,事务具备ACID的特性,即原子性、一致性、隔离性和持久性。 本地事务:当事务由资源管理器本地管理时被称作本地事务。本地事务的优点就是支持严格的ACID特性,高效,可靠,状态可以只在资源管理器中维护,而且应用编程模型简单。但是本地事务不具备分布式事务的处理能力,隔离的最小单位受限于资源管理器。 全局事务:当事务由全局事务管理器进行全局管理时成为全局事务,事务管理器负责管理全局的事务状态和参与的资源,协同资源的一致提交回滚。 TX协议:应用或者应用服务器与事务管理器的接口。 XA协议:全局事务管理器与资源管理器的接口。XA是由X/Open组织提出的分布式事务规范。该规范主要定义了全局事务管理器和局部资源管理器之间的接口。主流的数据库产品都实现了XA接口。XA接口是一个双向的系统接口,在事务管理器以及多个资源管理器之间作为通信桥梁。之所以需要XA是因为在分布式系统中从理论上讲两台机器是无法达到一致性状态的,因此引入一个单点进行协调。由全局事务管理器管理和协调的事务可以跨越多个资源和进程。全局事务管理器一般使用XA二阶段协议与数据库进行交互。 AP:应用程序,可以理解为使用DTP(Data Tools Platform)的程序。 RM:资源管理器,这里可以是一个DBMS或者消息服务器管理系统