事务隔离级别

MySQL 架构

我的未来我决定 提交于 2019-12-23 06:54:18
原文: MySQL 架构 MySQL架构和结构分析 官方架构图: MySQL DB 各模块架构图如下: MySQL安装方式 MySQL初始化 简介:什么是事务; 事务: ACID : 事务确保了银行不会弄丢你的钱,而这种特性在应用逻辑设计中是很难实现的,甚至不可实现。一个ACID兼容的数据库服务器,要为事务处理大量的复杂工作确保ACID特性的实现,而这也许是用户未能察觉到的。 事务: ACID : A :原子性(Atomicity) : 一个事务必须被视为一个单独的内部”不可分“的工作单元,以确保整个事务要么全部执行,要么全部回滚。当一个事务具有原子性时,该事务绝对不会被部分执行,要么完全执行,要么根本就不执行。 C:一致性 (consistency): 数据库总是从一种一致性状态转换到另一种一致性状态。只要是最终事务没有被提交,任何事务处理过程中所做的数据改变,也不会影响到数据库的内容。 I:隔离性 (leolation) : 某个事务的结 果只有在完成之后才对其它事务可见 D:持久性(durability) : 一旦一 个事务提交,事务所做的数据改变是永久的。这意味着数据改变已被记录,即使系统崩溃,数据也不会因此丢失,持久性是个有点模糊的概念,因为实际上持久性也分为很多级别。 隔离: 隔离级别 read uncommitted : 读 未提交内容:在read

Hibernate详解

ⅰ亾dé卋堺 提交于 2019-12-23 02:12:19
核心API 编辑 Hibernate的API一共有6个,分别为: Session 、 SessionFactory 、 Transaction 、 Query 、 Criteria 和Configuration。通过这些 接口 ,可以对持久化对象进行存取、事务控制。 Session Session 接口负责执行被持久化对象的 CRUD 操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句)。但需要注意的是 Session对象 是非 线程安全 的。同时,Hibernate的 session 不同于JSP应用中的HttpSession。这里当使用session这个术语时,其实指的是Hibernate中的session,而以后会将HttpSession对象称为用户session。 SessionFactory SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。这里用到了 工厂模式 。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。 Transaction Transaction 接口是一个可选的API,可以选择不使用这个接口

数据库记录数据

喜欢而已 提交于 2019-12-22 22:32:42
在很多异常情况下,比如高并发、网络糟糕的时候,数据库里偶尔会出现重复的记录。 假如现在有一张书籍表,结构类似这样 +----+--------------+ | id | name | +----+--------------+ | 1 | 世界简史 | +----+--------------+ 在异常情况下,可能会出现下面这样的记录 +----+--------------+ | id | name | +----+--------------+ | 1 | 世界简史 | | 2 | 人类简史 | | 3 | 人类简史 | +----+--------------+ 但是,想了想,自己在处理相关数据的时候也加了判重的相关逻辑,比如,新增时当图书 name 相同时,会提示图书重复而返回。 初次遇到这个情况的时候,感觉有点摸不着头脑,后面想了想,还是理清了,其实这和数据库的事务隔离级别有一定关系。 先简单说下数据库事务的 4 个隔离级别,然后重现下上述问题,最后说说解决办法。 1 数据库事务的 4 个隔离级别 1.1 未提交读 顾名思义,当事务隔离级别处于这个设置的时候,不同事务能读取其它事务中未提交的数据。 便于说明,我开了两个客户端(A 以及 B),并设置各自的隔离级别为未提交读。(并没有全局设置) 设置隔离级别命令 SET [SESSION | GLOBAL]

@Transactional注解

房东的猫 提交于 2019-12-22 20:37:29
@Transactional注解 一.事物传播行为介绍: @Transactional(propagation=Propagation.REQUIRED) :如果有事务, 那么加入事务, 没有的话新建一个(默认情况下)   @Transactional(propagation=Propagation.NOT_SUPPORTED) :容器不为这个方法开启事务   @Transactional(propagation=Propagation.REQUIRES_NEW) :不管是否存在事务,都创建一个新的事务,原来的挂起,新的执行完毕,继续执行老的事务   @Transactional(propagation=Propagation.MANDATORY) :必须在一个已有的事务中执行,否则抛出异常   @Transactional(propagation=Propagation.NEVER) :必须在一个没有的事务中执行,否则抛出异常(与Propagation.MANDATORY相反)   @Transactional(propagation=Propagation.SUPPORTS) :如果其他bean调用这个方法,在其他bean中声明事务,那就用事务.如果其他bean没有声明事务,那就不用事务. 二.事物超时设置: @Transactional(timeout=30) /

mysql面试题

孤街醉人 提交于 2019-12-22 03:04:26
1、 MySQL 的复制原理以及流程 基本原理流程,3个线程以及之间的关联; 2、 mysql 中myisam与innodb的区别,至少5点 (1)、问5点不同; (2)、innodb引擎的4大特性 (3)、2者selectcount(*)哪个更快,为什么 3、MySQL中varchar与char的区别以及varchar(50)中的50代表的涵义 (1)、varchar与char的区别 (2)、varchar(50)中50的涵义 (3)、int(20)中20的涵义 (4)、mysql为什么这么设计 4、问了innodb的事务与日志的实现方式 (1)、有多少种日志; (2)、事物的4种隔离级别 (3)、事务是如何通过日志来实现的,说得越深入越好。 5、问了MySQL binlog的几种日志录入格式以及区别 (1)、binlog的日志格式的种类和分别 (2)、适用场景; (3)、结合第一个问题,每一种日志格式在复制中的优劣。 6、问了下MySQL 数据库 cpu飙升到500%的话他怎么处理? (1)、没有经验的,可以不问; (2)、有经验的,问他们的处理思路。 7、sql优化 (1)、explain出来的各种item的意义; (2)、profile的意义以及使用场景; 8、备份计划,mysqldump以及xtranbackup的实现原理 (1)、备份计划; (2)、备份恢复时间; (3

MySQL 20个经典面试题

我是研究僧i 提交于 2019-12-22 03:04:11
1、MySQL的复制原理以及流程 基本原理流程,3个线程以及之间的关联; 1. 主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中; 2. 从:io线程——在使用start slave 之后,负责从master上拉取 binlog 内容,放进 自己的relay log中; 3. 从:sql执行线程——执行relay log中的语句; 2、MySQL中myisam与innodb的区别,至少5点 (1)、问5点不同; 1>.InnoDB支持事物,而MyISAM不支持事物 2>.InnoDB支持行级锁,而MyISAM支持表级锁 3>.InnoDB支持MVCC, 而MyISAM不支持 4>.InnoDB支持外键,而MyISAM不支持 5>.InnoDB不支持全文索引,而MyISAM支持。 (2)、innodb引擎的4大特性 插入缓冲(insert buffer),二次写(double write),自适应哈希索引(ahi),预读(read ahead) (3)、2者selectcount(*)哪个更快,为什么 myisam更快,因为myisam内部维护了一个计数器,可以直接调取。 3、MySQL中varchar与char的区别以及varchar(50)中的50代表的涵义 (1)、varchar与char的区别 char是一种固定长度的类型

MySQL面试题收集

走远了吗. 提交于 2019-12-22 03:03:54
1、MySQL的复制原理以及流程 基本原理流程,3个线程以及之间的关联; 1. 主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中; 2. 从:io线程——在使用start slave 之后,负责从master上拉取 binlog 内容,放进 自己的relay log中; 3. 从:sql执行线程——执行relay log中的语句; 2、MySQL中myisam与innodb的区别,至少5点 (1)、问5点不同; 1>.InnoDB支持事物,而MyISAM不支持事物 2>.InnoDB支持行级锁,而MyISAM支持表级锁 3>.InnoDB支持MVCC, 而MyISAM不支持 4>.InnoDB支持外键,而MyISAM不支持 5>.InnoDB不支持全文索引,而MyISAM支持。 (2)、innodb引擎的4大特性 插入缓冲(insert buffer),二次写(double write),自适应哈希索引(ahi),预读(read ahead) (3)、2者selectcount(*)哪个更快,为什么 myisam更快,因为myisam内部维护了一个计数器,可以直接调取。 3、MySQL中varchar与char的区别以及varchar(50)中的50代表的涵义 (1)、varchar与char的区别 char是一种固定长度的类型

mysql基本面试题

爱⌒轻易说出口 提交于 2019-12-22 03:03:34
1、MySQL的复制原理以及流程 基本原理流程,3个线程以及之间的关联; 1. 主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中; 2. 从:io线程——在使用start slave 之后,负责从master上拉取 binlog 内容,放进 自己的relay log中; 3. 从:sql执行线程——执行relay log中的语句; 2、MySQL中myisam与innodb的区别,至少5点 (1)、问5点不同; 1>.InnoDB支持事物,而MyISAM不支持事物 2>.InnoDB支持行级锁,而MyISAM支持表级锁 3>.InnoDB支持MVCC, 而MyISAM不支持 4>.InnoDB支持外键,而MyISAM不支持 5>.InnoDB不支持全文索引,而MyISAM支持。 (2)、innodb引擎的4大特性 插入缓冲(insert buffer),二次写(double write),自适应哈希索引(ahi),预读(read ahead) (3)、2者selectcount(*)哪个更快,为什么 myisam更快,因为myisam内部维护了一个计数器,可以直接调取。 3、MySQL中varchar与char的区别以及varchar(50)中的50代表的涵义 (1)、varchar与char的区别 char是一种固定长度的类型

Spring中的事务操作

↘锁芯ラ 提交于 2019-12-22 00:52:00
事务的特性 原子性:强调事务的不可分割。 一致性:事务的执行的前后数据的完整性保持一致。 隔离性:一个事务执行的过程中,不应该受到其他事务的干扰。 持久性:事务一旦结束,数据就持久化到数据库。 如果不考虑隔离性会引发的安全性问题 脏读:一个事务读到了另一个事务的未提交的数据。 不可重复读:一个事务读到了另一个事务已经提交的update的数据,导致多次查询的结果不一致。 虚读:一个事务读到了另一个事务已经提交的insert的数据,导致多次查询的结果不一致。 解决读问题:设置事务的隔离级别 未提交读:脏读、不可重复读和虚读都有可能发生。 已提交读:避免脏读,但是不可重复读和虚读有可能发生。 可重复读:避免脏读和不可重复读,但是虚读有可能发生。 串行化的:避免以上所有读问题。 Spring的声明式事务管理方式 Spring进行声明式事务配置的方式有两种: 基于xml配置文件方式 基于注解方式 但无论使用什么方式进行Spring的事务操作,首先要配置一个事务管理器。 搭建转账的环境 第一步,创建数据库表。 DROP TABLE IF EXISTS `account`; CREATE TABLE `account` ( `id` int(11) DEFAULT NULL, `username` varchar(100) DEFAULT NULL, `salary` int(11)

关于spring的事务传播特性

廉价感情. 提交于 2019-12-22 00:06:18
我们都知道事务的概念,那么事务的传播特性是什么呢?(此处着重介绍传播特性的概念,关于传播特性的相关配置就不介绍了,可以查看spring的官方文档) 在我们用SSH开发项目的时候,我们一般都是将事务设置在Service层 那么当我们调用Service层的一个方法的时候它能够保证我们的这个方法中执行的所有的对数据库的更新操作保持在一个事务中,在事务层里面调用的这些方法要么全部成功,要么全部失败。那么事务的传播特性也是从这里说起的。 如果你在你的Service层的这个方法中,除了调用了Dao层的方法之外,还调用了本类的其他的Service方法,那么在调用其他的 Service方法的时候,这个事务是怎么规定的呢,我必须保证我在我方法里掉用的这个方法与我本身的方法处在同一个事务中,否则如果保证事物的一致性。事务的传播特性就是解决这个问题的,“事务是会传播的”在Spring中有针对传播特性的多种配置我们大多数情况下只用其中的一种:PROPGATION_REQUIRED:这个配置项的意思是说当我调用service层的方法的时候开启一个事务(具体调用那一层的方法开始创建事务,要看你的aop的配置),那么在调用这个service层里面的其他的方法的时候,如果当前方法产生了事务就用当前方法产生的事务,否则就创建一个新的事务。这个工作使由Spring来帮助我们完成的。