数据库事务

事务及ACID四大特性

点点圈 提交于 2020-01-10 11:28:56
事务及ACID四大特性 1. 事务 事务(Transaction)是并发控制单位,是用户定义的一个操作序列,这些操作要么都做,要么都不做,是一个不可分割的工作单位。 在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。 事务通常以BEGIN TRANSACTION开始,以COMMIT或ROLLBACK结束。 1.1 概念 在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序。 1.2 特性 事务是恢复和并发控制的基本单位。 事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。 2. ACID特性 2.1 原子性(atomicity) 一个事务是一个不可分割的工作单位,事务中包括的操作要么都做,要么都不做。 2.2 一致性(consistency) 事务必须是使数据库从一个一致性状态变到另一个一致性状态。 比如,当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。如果数据库系统在运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是不一致的状态。 如果事务没有原子性的保证,那么在发生系统 故障的情况下,数据库就有可能处于不一致状态。 因而,事务的原子性与一致性是密切相关的。 2.3 隔离性

SQL Server死锁总结

老子叫甜甜 提交于 2020-01-10 10:57:56
http://luohonghong.blog.163.com/blog/static/78312058201142411533316/ SQLServer查看和解决死锁的方法 2011-05-24 11:05:33 | 分类: SQL | 字号 订阅 在master数据库中新建以下存储过程 --处理死锁 -- 查看当前进程,或死锁进程,并能自动杀掉死进程 -- 因为是针对死的,所以如果有死锁进程,只能查看死锁进程 -- 当然,你可以通过参数控制,不管有没有死锁,都只查看死锁进程 --调用示例 exec p_lockinfo create proc [dbo].[p_lockinfo] @kill_lock_spid bit=1, --是否杀掉死锁的进程,1 杀掉, 0 仅显示 @show_spid_if_nolock bit=1 --如果没有死锁的进程,是否显示正常进程信息,1 显示,0 不显示 as declare @count int,@s nvarchar(1000),@i int select id=identity(int,1,1),标志, 进程ID=spid,线程ID=kpid,块进程ID=blocked,数据库ID=dbid, 数据库名=db_name(dbid),用户ID=uid,用户名=loginame,累计CPU时间=cpu, 登陆时间=login_time

Redis-NoSQL入门和概述(一)

送分小仙女□ 提交于 2020-01-10 09:02:54
NoSQL简史及定义 NoSQL 这个术语最早是在 1998 年被 Carlo Strozzi 命名在他的轻量的,开源的关系型数据库上的,但是该数据库没有提供标准的 SQL 接口; 在 2009 年再次被 Eric Evans 提起,讨论分布式开源数据库的问题,这是的 NoSQL 主要指的非关系型,分布式的,不提供关系型的 atomicity(A) , consistency(C) , isolation(I) , durability(D) 即 ACID 的特性; 紧接着 2009 年在亚特兰大举行的 no:sql 讨论会是一个里程碑,当时的口号是 select fun, profit from real_world where relational=false ,因此之后对于 NoSQL 最普遍的解释为 非关系型的 ,强调 Key-Value 和 Document(文档) 数据库的优点,并非单纯的反对关系型数据库; 下面给 NoSQL 下一个定义,如果你在网上查阅资料会得到很多种定义,大家的理解不尽相同,我这里引用 http://nosql-database.org/ 网站上的定义: 下一代,主要解决以下几点:非关系数据库、分布式数据库、开源数据库和水平扩展数据库 原文信息:Next Generation Databases mostly addressing some of

MySQL MVCC Undo log Redo log

折月煮酒 提交于 2020-01-10 05:35:55
目录 什么是MVCC? MVCC-插入 MVCC-删除 MVCC-修改 MVCC-查询 Undo log Redo log 什么是MVCC? Multi Version Concurrency Control (多版本并发控制) 并发访问(读或写)数据库时,对事务内正在处理的数据做多版本管理。以实现写操作堵塞的同时,依然可以进行读操作。 MVCC-插入 插入规则:在数据行版本号列保存当前事务ID。 MVCC-删除 删除规则:将删除版本号列更新为当前事务ID。 MVCC-修改 修改规则:现将命中的数据行copy,将原数据的删除版本号设置为当前事务ID(33)。 MVCC-查询 查询规则: 1. 查找数据行版本小于或等于当前事务版本的数据行。这样可以确保事务读取的行,要么是在事务开始之前就存在的,要么是事务自身插入或修改过的; 2. 查找删除版本号要么为NULL,要么大于当前事务版本号的数据行。这样可以确保查询出来的记录在事务开启前没有被删除。 Undo log Undo意为取消,以撤销操作为目的,返回指定某个状态的操作。 Undo log指事务开始之前,在操作任何数据之前,首先将需操作的数据备份到一个地方 (Undo Log)。 UndoLog是为了实现事务的原子性而出现的产物。 Undo Log实现了事务的原子性: 事务处理过程中如果出现了错误或者用户执行了 ROLLBACK语句

SQL Server死锁总结

蹲街弑〆低调 提交于 2020-01-10 05:11:57
1. 死锁原理 根据操作系统中的定义:死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所站用不会释放的资源而处于的一种永久等待状态。 死锁的四个必要条件: 互斥条件 (Mutual exclusion) :资源不能被共享,只能由一个进程使用。 请求与保持条件 (Hold and wait) :已经得到资源的进程可以再次申请新的资源。 非剥夺条件 (No pre-emption) :已经分配的资源不能从相应的进程中被强制地剥夺。 循环等待条件 (Circular wait) :系统中若干进程组成环路,该环路中每个进程都在等待相邻进程正占用的资源。 对应到 SQL Server 中,当在两个或多个任务中,如果每个任务锁定了其他任务试图锁定的资源,此时会造成这些任务永久阻塞,从而出现死锁;这些资源可能是 :单行 (RID ,堆中的单行 ) 、索引中的键 (KEY ,行锁 ) 、页 (PAG , 8KB) 、区结构 (EXT ,连续的 8 页 ) 、堆或 B 树 (HOBT) 、表 (TAB ,包括数据和索引 ) 、文件 (File ,数据库文件 ) 、应用程序专用资源 (APP) 、元数据 (METADATA) 、分配单元 (Allocation_Unit) 、整个数据库 (DB) 。 一个死锁示例如下图所示: 说明: T1 、 T2 表示两个任务; R1 和

菜鸟系列Fabric源码学习 — MVCC验证

时光总嘲笑我的痴心妄想 提交于 2020-01-10 04:02:24
Fabric 1.4 源码分析 MVCC验证 读本节文档之前建议先查看[Fabric 1.4 源码分析 committer记账节点]章节。 1. MVCC简介 Multi-Version Concurrency Control 多版本并发控制,MVCC 是一种并发控制的方法,一般在 数据库 管理系统中,实现对数据库的并发访问。在数据库系统中,锁机制可以控制并发操作,但是其系统开销较大,而MVCC可以在大多数情况下代替行级锁,使用MVCC,能降低其系统开销。MVCC是通过保存数据在某个时间点的快照来实现的. 不同存储引擎的MVCC. 不同存储引擎的MVCC实现是不同的,典型的有乐观并发控制和悲观并发控制. 2. MVCC样例介绍 InnoDB的MVCC,是通过在每行记录后面保存两个隐藏的列来实现的,这两个列,分别保存了这个行的创建时间,一个保存的是行的删除时间。这里存储的并不是实际的时间值,而是系统版本号(可以理解为事务的ID),每开始一个新的事务,系统版本号就会自动递增,事务开始时刻的系统版本号会作为事务的ID。其中MVCC只在 READ COMMITTED 和 REPEATABLE READ 两个隔离级别下工作。 SELECT InnoDB会根据以下两个条件检查每行纪录: InnoDB只查找版本早于当前事务版本的数据行,即,==行的系统版本号小于或等于事务的系统版本号==

Mysql ------ 索引+ 事务

允我心安 提交于 2020-01-09 23:54:28
文章目录 一、索引: (1)数据库索引: (2)索引的作用: (3)索引分类: (4)创建索引的原则依据: (5)创建索引的办法: 二、事务: (1)事务概念: (2)事务的四大特性: (3)事务的操作: 三、两表相连查询: 一、索引: (1)数据库索引: 1、在数据库中,索引使数据程序无须对整个表进行扫描,就可以在其中找到所需数据; 2、数据库中的索引是某个表中一列或者若干列值的集合,以及物理标识这些值的数据页的逻辑指针清单。 (2)索引的作用: 1、数据库能够大大加快查询速率; 2、降低数据库的 IO 成本,并且索引还可以降低数据库的排序成本; 3、通过创建唯一性索引保证数据表数据的唯一性; 4、加快表与表之间的连接; 5、分组和排序的时候,可以大大减少分组和排序时间 (3)索引分类: 1、普通索引 :最基本的索引类型,而且没有唯一性之类的限制; 2、唯一性索引 :与普通索引基本相似,区别在于,索引列的所有值都只能出现一次,即必须唯一; 3、主键 :主键是一种唯一性索引,必须指定为 “ primary key ” ; 4、全文索引 :mysql 从3.23.23版本开始支持全文索引和全文检索,在mysql 中,全文索引的索引类型为 fulltext ,全文索引可以在 varchar 或者 text 类型的列上创建; 5、单列索引与多列索引:索引可以是单列上创建的索引

数据库事务

纵然是瞬间 提交于 2020-01-09 22:45:17
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 事务(Transaction)是并发控制的基本单位。所谓的事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。例如,银行转账工作:从一个账号扣款并使另一个账号增款,这两个操作要么都执行,要么都不执行。所以,应该把它们看成一个事务。事务是数据库维护数据一致性的单位,在每个事务结束时,都能保持数据一致性。 针对上面的描述可以看出,事务的提出主要是为了解决并发情况下保持数据一致性的问题。 事务具有以下4个基本特征。 ● Atomic(原子性):事务中包含的操作被看做一个逻辑单元,这个逻辑单元中的操作要么全部成功,要么全部失败。 ● Consistency(一致性):只有合法的数据可以被写入数据库,否则事务应该将其回滚到最初状态。 ● Isolation(隔离性):事务允许多个用户对同一个数据进行并发访问,而不破坏数据的正确性和完整性。同时,并行事务的修改必须与其他并行事务的修改相互独立。 ● Durability(持久性):事务结束后,事务处理的结果必须能够得到固化。 2.事务的语句  开始事物:BEGIN TRANSACTION  提交事物:COMMIT TRANSACTION  回滚事务:ROLLBACK TRANSACTION 3.事务的4个属性 ①原子性(Atomicity)

第六篇:Django的模型层

早过忘川 提交于 2020-01-09 22:36:56
ORM查询 1、只要是queryset对象就可以无限制调用Queryset对象的方法: res = models.User.objects.filter().filter().update().... 2、只要是queryset对象就可以通过下面的语句获得sql语句: print(res.query) 3、如果不是queryset对象,也可以获得sql语句,需要使用公共方法: # 固定的日志文件配置 拷贝到配置文件中即可 LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console':{ 'level':'DEBUG', 'class':'logging.StreamHandler', }, }, 'loggers': { 'django.db.backends': { 'handlers': ['console'], 'propagate': True, 'level':'DEBUG', }, } } 单独测试Django部分功能 当测试Django的时候,我们往往只需要测试部分功能,启动整个Django显得太慢,太大,因此我们可以书写测试脚本: 步骤如下: 1、在任意目录下创建一个py文件进行书写,或者直接在app下的 tests.py 文件中书写以下代码: #

redis面试

故事扮演 提交于 2020-01-09 15:24:44
面试还搞不懂redis,快看看这40道面试题(含答案和思维导图) 原创程序员追风 发布于2019-11-25 18:09:31 阅读数 51710 收藏 展开 Redis 面试题 1、什么是 Redis?. 2、Redis 的数据类型? 3、使用 Redis 有哪些好处? 4、Redis 相比 Memcached 有哪些优势? 5、Memcache 与 Redis 的区别都有哪些? 6、Redis 是单进程单线程的? 7、一个字符串类型的值能存储最大容量是多少? 8、Redis 的持久化机制是什么?各自的优缺点? 9、Redis 常见性能问题和解决方案: 10、redis 过期键的删除策略? 11、Redis 的回收策略(淘汰策略)? 12、为什么 edis 需要把所有数据放到内存中? 13、Redis 的同步机制了解么? 14、Pipeline 有什么好处,为什么要用 pipeline? 15、是否使用过 Redis 集群,集群的原理是什么? 16、Redis 集群方案什么情况下会导致整个集群不可用? 17、Redis 支持的 Java 客户端都有哪些?官方推荐用哪个? 18、Jedis 与 Redisson 对比有什么优缺点? 19、Redis 如何设置密码及验证密码? 20、说说 Redis 哈希槽的概念? 21、Redis 集群的主从复制模型是怎样的? 22、Redis