数据库事务

coding++:事务管理 隔离级别

泄露秘密 提交于 2020-03-29 15:01:03
在声明事务时,只需要通过value属性指定配置的事务管理器名即可,例如: @Transactional(value="transactionManagerPrimary") 。 除了指定不同的事务管理器之后,还能对事务进行隔离级别和传播行为的控制,下面分别详细解释: 隔离级别: 隔离级别是指若干个并发的事务之间的隔离程度,与我们开发时候主要相关的场景包括:脏读取、重复读、幻读。 我们可以看 org.springframework.transaction.annotation.Isolation 枚举类中定义了五个表示隔离级别的值: DEFAULT :这是默认值,表示使用底层数据库的默认隔离级别。对大部分数据库而言,通常这值就是: READ_COMMITTED 。 READ_UNCOMMITTED :该隔离级别表示一个事务可以读取另一个事务修改但还没有提交的数据。 该级别不能防止脏读和不可重复读,因此很少使用该隔离级别。 READ_COMMITTED :该隔离级别表示一个事务只能读取另一个事务已经提交的数据。该级别可以防止脏读,这也是大多数情况下的推荐值。 REPEATABLE_READ :该隔离级别表示一个事务在整个过程中可以多次重复执行某个查询,并且每次返回的记录都相同。 即使在多次查询之间有新增的数据满足该查询,这些新增的记录也会被忽略。 该级别可以防止脏读和不可重复读。

分布式事务

夙愿已清 提交于 2020-03-29 00:23:03
分布式事务 1.什么是事务   事务是用于访问和修改各种数据项的一个程序单位,这个程序要么全部执行,要么全部放弃。 2.为什么会引入事务的概念   针对于数据库来说,对数据文件的记录进行访问或修改,对这些数据项的修改封装起来来保证对数据项的访问或修改的原子性、一致性、隔离性、持久性。 3.事务的属性   (1)原子性:所有的工作要么在数据库中保存下来,要么全部回滚,全部不保留;   (2)一致性:事务完成或者撤销之后应该处于一致的状态;   (3)隔离性:多个事务同时进行互相互不干扰;   (4)持久性:事务提交后,所做的工作就被永久的保存下来。 4.事务的实现   (1)私有工作空间与影子更新   当进程启动事务T时,分配一个私有工作空间W,在提交或终止T前所有的读写操作都是在W中进行。      在(a)中,在对某文件进行访问时,共有三个数据块,在磁盘中对应于盘块0,、盘块1、盘块2,(b)当进程启动该事务时,便分配给它一个私有工作空间,如果我们现在要对盘块0和盘块3进行修改操作,那么就会在相应的0'和3’中进行,所有对文件的访问都是在私有工作空间进行的,在事务提交之前,对文件没有产生影响,访问的索引节点还是起初的索引节点,(c)在事务提交之后,那么影子块就会变成真正的盘块,私有工作空间的索引节点替代起初的索引节点。   (2)先写日志(WAL)   日志能够记录事务标识

NodeJs mysql 开启事务

房东的猫 提交于 2020-03-28 12:55:10
如题;node后台使用mysql数据库,并使用事务来管理数据库操作。 这里主要讲一个事务的封装并写了一个INSERT 插入操作。 code: 基础code: db.config.js const mysql = require('mysql') const pool = mysql.createPool({ connectionLimit: 20, //连接池连接数 host: 'localhost', //数据库地址,这里用的是本地 database: 'xxxx', //数据库名称 user: 'xxxxx', // username password: '*****' // password }) //返回一个Promise链接 const connectHandle = () => new Promise((resolve, reject) => { pool.getConnection((err, connection) => { if(err) { console.error('链接错误:' + err.stack + '\n' + '链接ID:' + connection.threadId) reject(err) } else { resolve(connection) } }) }) module.exports = connectHandle 事务操作

MySQL存储引擎介绍

狂风中的少年 提交于 2020-03-28 07:43:50
一 存储引擎解释   首先确定一点,存储引擎的概念是MySQL里面才有的,不是所有的关系型数据库都有存储引擎这个概念,后面我们还会说,但是现在要确定这一点。     在讲清楚什么是存储引擎之前,我们先来个比喻,我们都知道录制一个视频文件,可以转换成不同的格式,例如mp4,avi,wmv等,而存在我们电脑的磁盘上也会存在于不同类型的文件系统中如windows里常见的ntfs、fat32,存在于linux里常见的ext3,ext4,xfs,但是,给我们或者用户看懂实际视频内容都是一样的。直观区别是,占用系统的空间大小与清晰程度可能不一样。 那么数据库表里的数据存储在数据库里及磁盘上和上述的视频格式及存储磁盘文件的系统格式特征类似,也有很多种存储方式。   但是对于用户和应用程序来说同样一张表的数据,无论用什么引擎来存储,用户能够看到的数据是一样的。不同储引擎存取,引擎功能,占用空间大小,读取性能等可能有区别。说白了,存储引擎就是在如何存储数据、提取数据、更新数据等技术方法的实现上,底层的实现方式不同,那么就会呈现出不同存储引擎有着一些自己独有的特点和功能,对应着不同的存取机制。   因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即:对表的存储、操作等的实现方法不同),表是什么,表本质上就是磁盘上的文件。   其实MySQL支持多种存储引擎

mysql常见面试题目

北城余情 提交于 2020-03-28 04:48:47
1, mysql的复制原理以及流程。 (1)先问基本原理流程,3个线程以及之间的关联。 (2)再问一致性,延时性,数据恢复。 (3)再问各种工作遇到的复制bug的解决方法 2,mysql中myisam与innodb的区别,至少5点。 (1) 问5点不同 1>.InnoDB支持事物,而MyISAM不支持事物 2>.InnoDB支持行级锁,而MyISAM支持表级锁 3>.InnoDB支持MVCC, 而MyISAM不支持 4>.InnoDB支持外键,而MyISAM不支持 5>.InnoDB不支持全文索引,而MyISAM支持。(X) (2) 问各种不同mysql版本的2者的改进 (3)2者的索引的实现方式 3,问mysql中varchar与char的区别以及varchar(50)中的30代表的涵义。 (1)varchar与char的区别 char是一种固定长度的类型,varchar则是一种可变长度的类型 (2)varchar(50)中50的涵义 最多存放50个字符 (3)int(20)中20的涵义 int(M)中的M indicates the maximum display width (最大显示宽度)for integer types. The maximum legal display width is 255. (4)为什么MySQL这样设计? 4

SQL学习笔记

爷,独闯天下 提交于 2020-03-28 04:21:01
SQL Server管理 (1) SQL Server的两种验证方式:用户名验证和Windows验证,开发时用Windows验证就行了。 (2) 常用字段类型:bit(可选值0,1),datetime,int,varchar,nvarchar(可能含有中文用nvarchar)。 (3) varchar(),nvarchar().char(n)的区别: char(n)不足长度n的部分用空格填充 。Var: variable:可变的。 SQL语句入门 (1) SQL语句是和DBMS”交谈”专用的语句,不同DBMS都认SQL语法。 (2) SQL语句中字符串用 单引号 。 (3) SQL语句是 大小写不敏感的 ,不敏感指的是SQL关键字,字符串值还是大小写敏感。 (4) 创建表,删除表不仅可以手工完成,还可以执行SQL语句来完成,在自动化部署,数据导入中用的很多。 创建表: create table T_Person ( ID int not null, Name nvarchar(50), Age int null ) 删除表: drop table T_Person (5) 执行简单的Insert语句: insert into T_Person(ID,Name,Age) values (1,’Jim’,39) (6) *(熟悉):SQL主要分DDL(数据定义语言)和DML

SQL学习笔记

独自空忆成欢 提交于 2020-03-28 04:16:35
SQL 学习笔记 创建数据库 /*- 创建文件夹 project-*/ : exec xp_cmdshell 'mkdir D:\project' --D:\project 为路径 /*- 创建数据库 -*/ : use master go -- 查找数据库: if exists(select * from sysdatabases where name = ' 数据库名 ') -- 删除数据库: drop database 数据库名 go -- 创建数据库: create database 数据库名 on primary -- 可选 ( name = ' 数据库名 _data', -- 逻辑名 filename = 'D:\project\ 数据库名 _data.mdf', -- 物理名 size = 大小 mb, -- 大小 maxsize = 大小 mb, -- 最大容量 filegrowth = 1 -- 增长率 _ 按 1mb 增长 , 当等于 0 时表示不增长 ) log on -- 可选 ( name = ' 数据库名 _log', -- 逻辑名 filename = 'D:\project\ 数据库名 _log.ldf', -- 物理名 size = 大小 mb, -- 大小 maxsize = 大小 mb, -- 最大容量 filegrowth = 1% --

Spring 框架系列之事务管理

筅森魡賤 提交于 2020-03-27 22:21:08
1、事务回顾 (1)、什么是事务: 事务是逻辑上的一组操作,组成这组操作的各个逻辑单元,要么一起成功,要么一起失败。 (2)、事务特性(ACID) 原子性 :强调事务的不可分割 一致性 :事务的执行的前后数据的完整性保持一致 隔离性 :一个事务执行的过程中,不应该受到其他事务的干扰 持久性 :事务一旦结束,数据就持久到数据库 (3)、事务并发安全性问题 脏读 :一个事务读到了另一个事务的未提交的数据 不可重复读 :一个事务读到了另一个事务已经提交的 update 的数据导致多次查询结果不一致 幻读 :一个事务读到了另一个事务已经提交的 insert 的数据导致多次查询结果不一致 (4)、事务隔离级别 未提交读 :脏读,不可重复读,幻读都有可能发生 已提交读 :避免脏读,但是不可重复读和幻读有可能发生 可重复读 :避免脏读和不可重复读,但是幻读有可能发生 串行化 :避免以上所有读问题 (5)、常见数据库默认事务隔离级别 MySQL:可重复读 Oracle:读已提交 2、Spring 事务管理 (1)、基本事务操作 打开事务 提交事务 回滚事务 (2)、事务操作对象 Spring 事务管理中提供了 PlatformTransactionManager 接口操作事务,其中最为核心的对象是 TransactionManager 对象。 (3)、Spring 事务隔离级别 读未提交 读已提交

事务的四大特性和隔离级别

馋奶兔 提交于 2020-03-27 18:30:51
1.事务的四大特性(ACID): 指数据库事务正确执行的四个基本要素的缩写。包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。一个支持事务(Transaction)的数据库,必需要具有这四种特性,否则在事务过程(Transaction processing)当中无法保证数据的正确性,交易过程极可能达不到交易方的要求。 1.1 原子性(Atomicity) 第一个原子性,这个是最简单的。说的是一个事物内所有操作共同组成一个原子包,要么全部成功,要么全部失败。这是最基本的特性,保证了因为一些其他因素导致数据库异常,或者宕机。 1.2 一致性(Consistency) 第二一致性,这个是大家误解最深的,很多博客都喜欢用银行转账的例子来讲一直性,所谓的一致性是基于原子性。 原子性只保证了一个事物内的所有操作同一性,大家同生死,不会出现你死了,我还活着。但是,原子性并没有保证大家同一时刻一起生,一起死。计算机指令是有先后顺序的,这样就决定了一个事物的提交,会经历一个时间过程,那么如果事物提交进行到了一半,我读取了数据库,会不会读到中间结果? 为了防止这样的情况,数据库事物的一致性就规定了事物提交前后,永远只可能存在事物提交前的状态和事物提交后的状态,从一个一致性的状态到另一个一致性状态,而不可能出现中间的过程态

数据库的四大特性及事务的隔离级别

若如初见. 提交于 2020-03-27 18:27:37
  如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity)   原子性试纸事务包含所有的操作要么全部成功,要么全部失败回滚,事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对是数据库有任何影响。 ⑵ 一致性(Consistency)   一致性是指事务必须使数据库从一个一致性的状态转为为另一个一致性的状态,也就是说一个事务执行之前和执行之后都必须处于一致性的状态。   比如银行转账,加上A用户和B用户两者账户的钱一共有500,那么不管A用户和B用户之间如何转账,事务结束之后两个用户的钱加起来还是500,这就是事务的一致性。 ⑶ 隔离性(Isolation)   隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。   即要达到这么一种效果:对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前就已经结束,要么在T1结束之后才开始,这样每个事务都感觉不到有其他事务在并发地执行。   关于事务的隔离性数据库提供了多种隔离级别,稍后会介绍到。 ⑷ 持久性(Durability)   持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。