mysql事务

MySQL数据库 锁机制简介

百般思念 提交于 2019-12-03 04:48:42
MySQL 数据库 锁机制简介 数据库锁定机制简单来说就是数据库为了保证数据的一致性而使各种共享资源在被并发访问访问变得有序所设计的一种规则。 对于任何一种数据库来说都需要有相应的锁定机制 ,所以 MySQL 自然也不能例外。 MySQL 数据库由于其自身架构的特点,存在多种数据存储引擎,每种存储引擎所针对的应用场景特点都不太一样,为了满足各自特定应用场景的需求,每种存储引擎的锁定机制都是为各自所面对的特定场景而优化设计, 所以各存储引擎的锁定机制也有较大区别。 一、MySQL有三种锁的级别:页级、表级、行级。 MyISAM 和MEMORY 存储引擎采用的是表级锁; BDB 存储引擎采用的是页面锁,但也支持表级锁; InnoDB 存储引擎既支持行级锁,也支持表级锁,但默认情况下是采用行级锁。 MySQL 这3 种锁的特性可大致归纳如下: 表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高, 并发度最低。 行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低, 并发度也最高。 页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。 二、死锁 死锁是指两个或者两个以上的事务在执行过程中,因争夺资源而造成的一种相互等待的现象。解决死锁最简单的一种方式是超时,即当两个事务相互等待是

数据库事务【重点】、数据库单库备份、数据库多库备份、数据库全部备份、重新导入数据库文件

纵饮孤独 提交于 2019-12-03 04:47:00
day 05 数据库 1.pymysql 介绍: Python操作mysql的模块 安装: pip install mysql 连接: import pymysql conn = pymysql.connect(host='主机名', user='用户名', password='密码', database='数据库名',charset='utf8'); cursor = conn.cursor() ### 返回的是元祖套元祖 cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) ### 返回的是列表套字典 执行sql语句: cursor.execute(sql) 查: fetchall() : 获取多个, 返回 列表套字典 fetchone() : 获取一个, 返回 字典 fetchmany(size) : 获取size个数据, 返回的是 列表套字典 增删改: conn.commit() SQL注入: 原因: 太相信用户输入的数据 解决的方法: # sql = "select * from user where name='%s' and password='%s'" % (user, pwd) sql = "select * from user where name=%s and password=%s" cursor

五、事务、视图、触发器、存储过程、函数和备份

大兔子大兔子 提交于 2019-12-03 04:42:38
目录 一、事务consaction (一)什么是事务 (二)事务的ACID特性 (1)原子性Atomicity (2)一致性consistency (3)隔离性Isolation (4)持久性Durability (二)存储引擎engine (1)InnoDB (2)MyIsam 二、视图view (一)增加视图 (二)删除视图 三、触发器trigger (一)创建触发器 (二)查看和删除触发器 四、存储过程procedure (一)创建存储过程 (二)删除存储过程 五、函数 六、数据库备份 一、事务consaction (一)什么是事务 事务是指一组操作,要么都执行成功,要么都执行失败 start consaction:开启事务 commit:提交确认 rollback:回滚,撤销 # 语法 start transaction; sql语句 commit/roll back; # 1. 事务下的代码在commit之后才会生效 # 2. 事务下的代码rollback之后会失效 (二)事务的ACID特性 (1)原子性Atomicity 指不能再分的事务,要么全部成功,要么全部失败 (2)一致性consistency 事务发生前和发生后,数据的总额依然匹配 (3)隔离性Isolation 某个事务的操作对其他事物不可见 (4)持久性Durability 当事务完成后,其影响应该保留下来

Spring事务详细解释

六月ゝ 毕业季﹏ 提交于 2019-12-03 04:37:20
前言 Spring在TransactionDefinition接口中规定了7种类型的事务传播行为。事务传播行为是Spring框架独有的事务增强特性,他不属于的事务实际提供方数据库行为。这是Spring为我们提供的强大的工具箱,使用事务传播行可以为我们的开发工作提供许多便利。但是人们对他的误解也颇多,你一定也听过“service方法事务最好不要嵌套”的传言。要想正确的使用工具首先需要了解工具。本文对七种事务传播行为做详细介绍,内容主要代码示例的方式呈现。 基础概念 1. 什么是事务传播行为? 事务传播行为用来描述由某一个事务传播行为修饰的方法被嵌套进另一个方法的时事务如何传播。 用伪代码说明: public void methodA(){ methodB(); //doSomething } @Transaction(Propagation=XXX) public void methodB(){ //doSomething } 代码中 methodA() 方法嵌套调用了 methodB() 方法, methodB() 的事务传播行为由 @Transaction(Propagation=XXX) 设置决定。这里需要注意的是 methodA() 并没有开启事务,某一个事务传播行为修饰的方法并不是必须要在开启事务的外围方法中调用。 2. Spring中七种事务传播行为 定义非常简单

企业分布式事务经典方案综述汇总

会有一股神秘感。 提交于 2019-12-03 02:56:41
基本概念 本地事务 事务由资源管理器(如DBMS)本地管理 优点:严格的ACID 缺点:不具备分布事务处理能力 全局事务(DTP模型) TX协议:应用或应用服务器与事务管理器的接口 XA协议:全局事务管理器与资源管理器的接口 优点:严格的ACID 缺点:效率非常低 两阶段提交 优点 准备后,仍可提交或回滚 准备时,一致性检查必须OK 准备后,事务结果仍然只在事务内可见 准备后,事务结果已经持久化 缺点: 潜在故障点多带来的脆弱性 准备后,提交前的故障引发一系列隔离与恢复难题 http://book.51cto.com/art/201309/410608.htm 跨域的全局事务(DTP模型) 缺点 更高的协议成本 脆弱,故障点多 故障影响大,恢复困难 复杂,更多架构与平台约束 java企业平台中的分布式事务实现 JTA 面向应用、应用服务器与资源管理器的高层事务接口 JTS JTA事务管理器的实现标准,向上支持JTA,向下通过CORBA OTS实现跨事务域的互操作性 EJB 优点 简单一致的编程模型 跨域分布处理的ACID保证 局限 DTP模型本身的局限 缺少充分公开的大规模、高可用、密集事务应用的成功案例 JMS与分布式事务: http://techv5.com/topic/1371/ 其它资源 ws-transaction标准 jbossTransaction系统 Paxos算法

MySQL面试题

不想你离开。 提交于 2019-12-03 01:47:04
1、MySQL的复制原理以及流程 (1)、复制基本原理流程 1. 主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中; 2. 从:io线程——在使用start slave 之后,负责从master上拉取 binlog 内容,放进 自己的relay log中; 3. 从:sql执行线程——执行relay log中的语句; (2)、MySQL复制的线程有几个及之间的关联 MySQL 的复制是基于如下 3 个线程的交互( 多线程复制里面应该是 4 类线程): 1. Master 上面的 binlog dump 线程,该线程负责将 master 的 binlog event 传到slave; 2. Slave 上面的 IO 线程,该线程负责接收 Master 传过来的 binlog,并写入 relay log; 3. Slave 上面的 SQL 线程,该线程负责读取 relay log 并执行; 4. 如果是多线程复制,无论是 5.6 库级别的假多线程还是 MariaDB 或者 5.7 的真正的多线程复制, SQL 线程只做 coordinator,只负责把 relay log 中的 binlog读出来然后交给 worker 线程, woker 线程负责具体 binlog event 的执行; (3)

MySQL常见问题

巧了我就是萌 提交于 2019-12-03 01:46:33
事务四大特性 原子性:不可分割的操作单元,事务中所有操作,要么全部成功;要么撤回到执行事务之前的状态 一致性:如果在执行事务之前数据库是一致的,那么在执行事务之后数据库也还是一致的; 隔离性:事务操作之间彼此独立和透明互不影响。事务独立运行。这通常使用锁来实现。一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。事务的100%隔离,需要牺牲速度。 持久性:事务一旦提交,其结果就是永久的。即便发生系统故障,也能恢复。 MySQL的事务隔离级别 未提交读(Read Uncommitted):允许脏读,其他事务只要修改了数据,即使未提交,本事务也能看到修改后的数据值。也就是可能读取到其他会话中未提交事务修改的数据 提交读(Read Committed):只能读取到已经提交的数据。Oracle等多数数据库默认都是该级别 (不重复读)。 可重复读(Repeated Read):可重复读。无论其他事务是否修改并提交了数据,在这个事务中看到的数据值始终不受其他事务影响。 串行读(Serializable):完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞 MySQL数据库(InnoDB引擎)默认使用可重复读( Repeatable read) 索引 数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。索引的实现通常使用 B_TREE。B

redis 小弟入门

匿名 (未验证) 提交于 2019-12-03 00:44:02
概念背景: 传统数据酷MySQL,采用遵循 ACID规则 事务的原子性(Atomicity) :是指一个事务要么全部执行,要么不执行,也就是说一个事务不可能只执行了一半就停止。 事务的一致性(Consistency) :是指事务的运行并不改变数据库中数据的一致性。 独立性(Isolation) :事务的独立性也有称作隔离性,是指两个以上的事务不会出现交错执行的状态。 持久性(Durability) :事务的持久性是指事务执行成功以后,该事务对数据库所作的更改便是持久的保存在数据库之中,不会无缘无故回滚。 Redis 非关系型数据库,遵循的是 一致性(C):在 分布式系统 中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本) 可用性(A):在 集群中 一部分节点故障后,集群整体是否还能响应客户端的读写请求。(对数据更新具备 高可用性 ) 分区容错性(P):以 实际效果 而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择。 Redis 类型不多,也很奇葩,也很好用 String set key value string类型是二进制安全的,意redis的string可以包含任何数据,比如jpg图片或者序列化的对象 。 string类型是 Redis最基本 的数据类型,

框架和事务

匿名 (未验证) 提交于 2019-12-03 00:39:02
1**** Hibernate与MyBatis 开发学习 Hibernate的真正掌握要比Mybatis来得难些。Mybatis框架相对简单很容易上手,但也相对简陋些。个人觉得要用好Mybatis还是首先要先理解好Hibernate。 开发工作量 针对高级查询Mybatis需要手动编写SQL语句,以及ResultMap(映射)Hibernate有良好的映射机制SQL的生成与结果映射,可以更专注于业务流程。 SQL优化方面 Hibernate的查询会将表中的所有字段查询出来,这一点会有性能消耗,也可以手动Mybatis的SQL是手动编写的,所以可以按需求指定查询的字段。 扩展性方面 Hibernate与具体数据库的XMLHQL语句与具体使用的数据库无关,移植性很好。MyBatis项目中所有的SQL语句都是依赖所用的数据库的,所以不同数据库类型的支持不好。 五章 缓存机制对比 Hibernate与MyBatis都可以是通过SessionFactoryBuider由XML配置文件生成SessionFactory,然后由SessionFactory 生成Session,最后由Session来开启执行事务和SQL语句。其中SessionFactoryBuider,SessionFactory,Session的生命周期都是差不多的。 Hibernate的调优方案 制定合理的缓存策略;

事务隔离级别和传播行为基础篇

匿名 (未验证) 提交于 2019-12-03 00:37:01
再次之前自认为我对数据库事务和隔离级别很熟悉了,至少以前整理过,看过网上很多文章,有些带有命令行操作的印象挺深,但是事务传播(包块调用外部系统服务)、分布式锁、mybatis一级缓存等一起存在业务代码中,导致了很多看起来听不可思议的问题,这都是线上案例。 项目中架构师是否跟你说类似的话,事务最好不要嵌套,为什么?如果这样的话事务传播应如何使用,为了方便本片先将事务相关的基础知识做下汇总: 数据库事务ACID特性 1)原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。 2)一致性(Consistency)事务开始前和结束后,数据库的完整性约束没有被破坏 。比如A向B转账,不可能A扣了钱,B却没收到。 3) 隔离性(Isolation):同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。比如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账(其实是隔离级别中的串行化)。 4)持久性(Durability):事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。 事务4种隔离级别 1):Read Uncommitted