事务

数据库事务

浪尽此生 提交于 2020-04-06 08:12:13
  事务是一系列操作组成的工作单元,该工作单元内的操作是不可分割的,也就是说要么全部执行,要么全部都不执行。 四大属性 原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。 一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。 隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。 持久性(durability)。持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。 隔离级别    默认事务的隔离级别 mysql> SHOW VARIABLES LIKE 'tx_isolation'; 默认为 可重复读 设置当前会话隔离级别 SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE; 本文索引关键字: 原子性(atomicity):http://www.cnblogs.com/huanStephen/p/8075938.html#atomicity 一致性(consistency):http://www.cnblogs

数据库

强颜欢笑 提交于 2020-04-06 08:11:36
数据库 ,简而言之可视为电子化的档案柜——储存电子档案的处所,使用者可以对档案中的资料执行新增、截取、更新、删除等操作。 所谓“资料库”系以 一定方式 储存在一起、能予多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。 数据库管理系统 数据库管理系统(database management system,简称DBMS)是为管理数据库而设计的电脑软件系统,一般具有存储、截取、安全保障、备份等基础功能。数据库管理系统可依据它所支持的数据库模型来作分类,例如关联式、XML;或依据所支持的电脑类型来作分类,例如服务器集群、移动电话;或依据所用查询语言来分类,例如SQL、XQuery;或依据性能冲量点来分类,例如最大规模、最高执行速度;不论使用那种分类方式,一些DBMS能够跨类别,例如同时支持多种查询语言。 类型: 关系型数据库: MySQL   MariaDB(MySQL的代替品)   Percona Server(MySQL的代替品) PostgreSQL Microsoft Access Microsoft SQL Server Google Fusion Tables FileMaker Oracle资料库 Sybase dBASE Clipper FoxPro foshub 非关系型数据库(NoSQL): BigTable(Google) Cassandra

MySQL各种存储引擎对比

六月ゝ 毕业季﹏ 提交于 2020-04-06 04:04:45
欢迎观看 {无双}(wushuang) 的读书笔记,您可以通过订阅 无双的公众号或微博或头条号 持续关注最新的文章。 头条号ID:1656865998770190 微信公众号:落叶飞翔的蜗牛 开源中国博客: https://my.oschina.net/zhouguanya QQ:3190976240 MySQL数据库区别于其他数据库的最重要的一个特点是其插件式的存储引擎。 MySQL各类存储引擎 InnoDB存储引擎 从MySQL数据库5.5.8版本开始,InnoDB存储引擎是默认的存储引擎。 InnoDB存储引擎支持事务,其设计目标主要是面向在线事务处理(OLTP)的应用。其特点是行锁设计、支持外键,支持类似于Oracle的非锁定读,即默认读取操作不会产生锁。 InnoDB通过使用多版本并发控制MVCC来获取高并发性,并且实现了SQL标准的4种隔离级别,默认为repeatable级别。同时,使用一种称为next-key locking的策略避免幻读现象的产生。除此之外,InnoDB存储引擎还提供了插入缓冲、二次写、自适应哈希索引、预读等高性能和高可用的功能。 对于表中存储的数据,InnoDB存储引擎采用聚集的方式,每张表的存储都是按照主键的顺序进行存放的。如果没有显示的在定义时指定主键,InnoDB存储引擎会为每一行生成一个6字节的ROWID作为主键。 MyISAM存储引擎

MySQL事务隔离性

好久不见. 提交于 2020-04-05 19:23:31
事务隔离性 当多个线程都开启事务操作数据库中数据时,数据库系统要能进行隔离操作,以保证各个线程获取数据的准确性。 如果没有隔离,会发生的几种问题 脏读(Dirty Read) 一个事务处理过程里读取了另一个未提交的事务中的数据 不可重复读(NonRepeatable Read) 对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,这是由于在查询的间隔期间,另外一个事务修改并提交了该数据。 不可重复读和脏读的区别是,脏读是某一事务读取了另一个事务未提交的脏数据,而不可重复读则是读取了前一事务提交的数据。 在某些情况下,不可重复读并不是问题,比如我们多次查询某个数据当然以最后查询得到的结果为主。但在另一些情况下就有可能发生问题,例如对于同一个数据A和B依次查询就可能不同,A和B就可能打起来了……。 幻读(Phantom Read) 在一个事务中读取到了别的事务插入的数据,导致前后不一致。 事务A 按照一定条件进行数据读取,期间事务B插入了相同搜索条件的新数据,事务A再次按照原先条件进行读取时,发现了事务B 新插入的数据。 不同隔离级别的问题 MySQL的锁类型 表锁 对一整张表加锁,并发能力低下(即使有分读锁、写锁),一般在DDL处理时使用,myisam也是表锁。 行锁 只锁住特定行的数据,并发能力强,MySQL一般都是用行锁来处理并发事务。 如果用到无索引的字段

【Java系列002】正确使用@Transactional注解

[亡魂溺海] 提交于 2020-04-05 17:42:43
你好,我是miniluo,今天我和你聊聊Spring声明式事务不生效的坑。 下面就让我和你一起学习有哪些几种情况下Spring声明式事务不生效的坑。 没有正确理解@Transactional注解 你是否曾经写过和下文类似的代码? @Service ( "productService" ) public class ProductServiceImpl implements IProductService { @Override public void createProduct (Product product) { //此处可能会实现一些业务逻辑代码,判断是否满足创建产品的条件 //请求内部方法创建产品 product.setProductName( "Spring声明式事务" ); executeCreateProduct(product); } @Transactional private void executeCreateProduct (Product product) { if (Objects.isNull(product)){ throw new RuntimeException( "无法创建空产品" ); } product.create(); //模拟出现异常期待事务回滚 int zero = 1 / 0 ; } } 经过测试,我们发现抛出了异常

分布式事务浅析及简单实现

旧时模样 提交于 2020-04-05 16:31:18
作者:翟飞 在分布式系统中,为了保证数据的高可用,通常,我们会将数据保留多个副本(replica),这些副本会放置在不同的物理的机器上。为了对用户提供正确的 CRUD 等语义,我们需要保证这些放置在不同物理机器上的副本是一致的。分布式事务在现在遍地都是分布式部署的系统中几乎是必要的。 我们先聊一下啥是事务? 分布式事务、事务隔离级别、ACID我相信大家这些东西都耳熟能详了,那什么是事务呢? 概念: 一般是指要做的或所做的事情。 指作为单个逻辑工作单元执行的一系列操作,要么全部执行,要么全部不执行。 简单的说,事务就是并发控制的单位,是用户定义的一个操作序列。 特性: 事务是恢复和并发控制的基本单位。 事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。 原子性(atomicity):一个事务是一个不可分割的工作单位,事务中包括的操作要么都做,要么都不做。 一致性(consistency):事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。 隔离性(isolation):一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。 持久性(durability):持久性也称永久性(permanence),指一个事务一旦提交

事务隔离级别,为什么SQLSERVER 容易锁表

旧时模样 提交于 2020-04-04 10:22:57
在Oracle中,读取操作不会阻碍更新操作,更新操作也不会阻碍读取操作,这样在Oracle中的各种隔离级别下,读取操作都不会等待更新事务结束,更新操作也不会因为另一个事务中的读取操作而发生等待,这也是Oracle事务处理的一个优势所在。 oracle支持Read Committed和Serializable级别,默认的隔离级别是Read committed,在oracle中隔离级别实现如下: Read Committed隔离级别(也称为语句级别的隔离) 如果一个事务正在对某个表进行DML操作,而这时另外一个会话对这个表的记录进 行读取操作,则Oracle会去读取回滚段或撤销段中存放的更新之前的记录,而不会象SQL Server一样等待更新事务的结束。 Serializable隔离级别(也称为事务级别的隔离) 事务中的读取操作只能读取这个事务开始之前已经提交的数据结果。如果在读取时, 其他事务正在对记录进行修改,则Oracle就会在回滚段或撤销段中去寻找对应的原来未经更改的记录(而且是在读取操作所在的事务开始之前存放于回滚段或 撤销段的记录),这时读取操作也不会因为相应记录被更新而等待。 ———————————————— 版权声明:本文为CSDN博主「ClementQL」的原创文章,遵循 CC 4.0 BY-NC-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https

sql server 数据库事务隔离级别

假如想象 提交于 2020-04-04 04:33:17
SQL SERVER锁的机制 SQL server的所有活动都会产生锁。锁定的单元越小,就越能越能提高并发处理能力,但是管理锁的开销越大。如何找到平衡点,使并发性和性能都可接受是SQL Server的难点。 SQL Server有如下几种琐: 1、 共享锁 用于只读操作(SELECT),锁定共享的资源。共享锁不会阻止其他用户读,但是阻止其他的用户写和修改。 2、 更新锁 更新锁是一种意图锁,当一个事务已经请求共享琐后并试图请求一个独占锁的时候发生更新琐。例如当两个事务在几行数据行上都使用了共享锁,并同时试图获取独占锁以执行更新操作时,就发生了死锁:都在等待对方释放共享锁而实现独占锁。更新锁的目的是只让一个事务获得更新锁,防止这种情况的发生。 3、 独占锁 一次只能有一个独占锁用在一个资源上,并且阻止其他所有的锁包括共享缩。写是独占锁,可以有效的防止’脏读’。 4、 意图缩 在使用共享锁和独占锁之前,使用意图锁。从表的层次上查看意图锁,以判断事务能否获得共享锁和独占锁,提高了系统的性能,不需从页或者行上检查。 5、 计划锁 Sch-M,Sch-S。对数据库结构改变时用Sch-M,对查询进行编译时用Sch-S。这两种锁不会阻塞任何事务锁,包括独占锁。 读是共享锁,写是排他锁,先读后更新的操作是更新锁,更新锁成功并且改变了数据时更新锁升级到排他锁。锁的类型有: DB-----数据库,由于

MySQL 21道高频面试题及其解析

人盡茶涼 提交于 2020-04-03 23:52:04
Q1:MySQL主要有哪些存储引擎,分别适合哪些应用场景? 答:主要有①MyISAM,是5.5版本之前的默认存储引擎,支持表级锁,不支持事务和外键,并发效率较低,读取数据快,更新数据慢。适合以读操作为主,并且对并发性要求较低的应用。②InnoDB,MySQL目前的默认存储引擎,支持行级锁、事务和外键,并发效率好。适合对事务的完整性和并发性、数据的准确性要求比较高,增删操作多的应用。③Memory,所有的数据都保存在内存中,访问速度快,一旦服务关闭数据将丢失。适合更新不太频繁的数据量小的表用来快速得到访问结果。④Archive、Federated等。 Q2:索引是什么? 答:MySQL官方对索引的定义为:索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据, 这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。 Q3:索引的优缺点有哪些? 答:①优势:提高数据检索的效率,降低数据库的IO成本。通过索引列对数据进行排序,降低数据排序的成本,降低CPU的消耗。②劣势:实际上索引也是一张表,该表中保存了主键与索引字段,并指向实体类的记录,所以索引列也是要占用空间的。 虽然索引大大提高了查询效率,同时却也降低更新表的速度,如对表进行INSERT、UPDATE