回滚

数据库事务的总结

一笑奈何 提交于 2019-12-02 08:58:56
系统又出现,用户的钱给多扣了,库存莫名给多了几个。 进销存出现的问题还是比交多的,看了很长时间都没有找到解决办法, 依稀记得之前去面试的时候面试官问到过我回滚的问题,当时没有回答好,回想常去面试一下也好。 今天去学习了一下数据库事务的一些知识。(总结一下) 一个简单的例子。 1 --通过事务执行转账 约束是金额不能小于10,所以当小于10 的时候就会出错。才能进入事务 2 begin transaction 3 declare @sum int = 0 4 update bank set balance = balance+10 where cld ='0001' 5 set @sum = @sum+ @@ERROR 6 update bank set balance = balance-10 where cld ='0002' 7 set @sum = @sum+ @@ERROR 8 --只要有一个sql 有错sum 就一定不是零,只要是sum不是零那就直接回滚, 9 if @sum <> 0 10 begin 11 --表示程序执行出错 --回滚 12 rollback 13 end 14 else 15 begin 16 --如果没有出错,则提交该事务 17 commit 18 end 19 事务的分类 ---自动提交事务 -- 当执行一条sql语句的时候

mysql事务提交和回滚机制

限于喜欢 提交于 2019-12-02 05:50:42
应用场景: 银行取钱,从ATM机取钱,分为以下几个步骤 1 登陆ATM机,输入密码; 2 连接数据库,验证密码; 3 验证成功,获得用户信息,比如存款余额等; 4 用户输入需要取款的金额,按下确认键; 5 从后台数据库中减掉用户账户上的对应金额; 6 ATM吐出钱; 7 用户把钱拿走。 对于上面的取钱这个事情,如果有一步出现错误的话,那么就会取消整个取钱的动作,但是如果在第5步,系统后台已经把钱减了,但是ATM机没有取出来,那么就应用到mysql中的事务。简单地 来说,就是取钱这7步要么都完成,要么就啥也不做,在数据库中就是这个道理。 事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位,事务回滚是指将该事务已经完成的对数据库的更新操作撤销,在事务中,每个正确的原子 操作都会被顺序执行,直到遇到错误的原子操作。回滚的意思其实即使如果之前是插入操作的话,那么会执行删除之前插入的记录,如果是修改操作的话,那么会执行将update之前的记录还原。 因此,正确的原子操作是真正被执行过的,是物理执行。 事务是由一条或者多条sql语句组成,在事务的操作中,要么这些sql语句都执行,要么都不执行。 事务的ACID特性:原子性,一致性,隔离性,持久性。 在当前事务中确实能看到插入的记录,最后只不过被删除了,但是auto_increament不会删除而是改变值

PostgreSQL与MySQL比较

試著忘記壹切 提交于 2019-12-02 05:23:39
本帖最后由 osdba 于 2011-04-21 16:33 编辑 特性 MySQL PostgreSQL 实例 通过执行 MySQL 命令(mysqld)启动实例。一个实例可以管理一个或多个数据库。一台服务器可以运行多个 mysqld 实例。一个实例管理器可以监视 mysqld 的各个实例。 通过执行 Postmaster 进程(pg_ctl)启动实例。一个实例可以管理一个或多个数据库,这些数据库组成一个集群。集群是磁盘上的一个区域,这个区域在安装时初始化并由一个目录组成,所有数据都存储在这个目录中。使用 initdb 创建第一个数据库。一台机器上可以启动多个实例。 数据库 数据库是命名的对象集合,是与实例中的其他数据库分离的实体。一个 MySQL 实例中的所有数据库共享同一个系统编目。 数据库是命名的对象集合,每个数据库是与其他数据库分离的实体。每个数据库有自己的系统编目,但是所有数据库共享 pg_databases。 数据缓冲区 通过 innodb_buffer_pool_size 配置参数设置数据缓冲区。这个参数是内存缓冲区的字节数,InnoDB 使用这个缓冲区来缓存表的数据和索引。在专用的数据库服务器上,这个参数最高可以设置为机器物理内存量的 80%。 Shared_buffers 缓存。在默认情况下分配 64 个缓冲区。默认的块大小是 8K。可以通过设置

idea Git版本回退

房东的猫 提交于 2019-12-02 03:50:41
以此文记录下在IDEA中如何回滚项目历史版本,并提交远程. 一、 大致分为两步: 第一步,回滚本地代码; 第二步,回滚远程代码; 首先,我们先来回滚本地代码 按照下图的步骤,获取你要回滚的历史版本的版本号 然后项目根目录右键 Git->Repository->Reset HEAD Reset Type 有三种: mixed 默认方式,只保留源码,回退commit和index信息 soft 回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit hard 彻底回退,本地源码也会变成上一个版本内容 此时我们选择Hard彻底回退,点击Reset就能将本地代码版本回滚到指定版本。 然后我们开始将回滚的本地代码提交到远程仓库,此时有两种方式: 第一种,直接强制提交,使用git命令提交 git push -f,但是这样会把回滚版本之后的提交记录全部删除,因此不建议这样做。 第二种,用前面我们回滚本地的方式,再次回滚到最新版本。 首先,我们获取到远程分支最新版本的版本号 然后,我们再次Git->Repository->Reset HEAD 这次与之前有些不一样,我们Reset Type采用Mixed方式将源码保留,然后点击Reset。 最后我们发现代码已经是旧版本的代码,并且版本还是最新版本

微服务的数据库设计

天涯浪子 提交于 2019-12-02 03:22:29
单独的数据库: 微服务设计的一个关键是数据库设计,基本原则是每个服务都有自己单独的数据库,而且只有微服务本身可以访问这个数据库。它是基于下面三个原因。 优化服务接口:微服务之间的接口越小越好,最好只有服务调用接口(RPC或消息),没有其他接口。如果微服务不能独享自己的数据库,那么数据库也变成了接口的一部分,这大大拓展了接口范围。 错误诊断:生产环境中的错误大部分都是和数据库有关的,要么是数据出了问题,要么是数据库的使用方式出了问题。当你不能完全控制数据库的访问时,会有各种各样的错误发生。它可能是别的程序直接连到你的数据库或者是其他部门直接用客户端访问数据库的数据,而这些都是在程序中查不到的,增加了错误排查难度。如果是程序中的问题,只要修改了代码,那么这个错误就不会再有。而上面提到的错误,你永远都没法预测它们什么时候还会再次发生。 性能调优:性能调优也是一样,你需要对数据库有全权控制才能保证它的性能。如果其他部门一定要访问数据库,而且只是查询的话,那么可以另外创建一份只读数据库,让他们在另一个库中查询,这样才不会影响到你的库。 理想的设计是你的数据库只有你的服务能访问,你也只调用自己数据库中的数据,所有对别的微服务的访问都通过服务调用来实现(请参阅“微服务之间调用的最佳设计“)。当然,在实际应用中,单纯的服务调用可能不能满足性能或其他要求,不同的微服务都多少需要共享一些数据。

细谈Mysql事务

谁说胖子不能爱 提交于 2019-12-02 02:56:45
文章原创于公众号:程序猿周先森。本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号。 上一篇着重谈到了MySQL锁的概念,里面谈到了事务的概念,其实大部分开发者对于事务肯定不陌生,事务的概念其实就是一组SQL语句组成一个执行单元,如果单元中的某个SQL语句执行出现异常,则需要将整个事务进行回滚到未修改的状态。只有单元中全部SQL语句都成功执行,才会提交数据代表事务执行成功。而Mysql其实前几篇我们都已经知道是支持多种存储引擎的,其实正是因为MyISAM引擎不支持事务被InnoDB取代的原因。所以本篇文章主要是针对InnoDB引擎详细了解下事务这个概念。 事务特性 原子性: 事务是一个原子操作单元,其对数据的修改,要么全都执行,要么全都不执行。 一致性:事务中包含的处理要满足数据库提前设置的约束,如主键约束或者NOT NULL 约束等。 隔离性:事务处理过程中的中间状态对外部是不可见的。 持久性:事务完成之后,它对于数据的修改是永久性的。 隔离性的四种隔离级别 InnoDB引擎支持的4种事务隔离级别分别是:读未提交、读已提交、可重复读、串行读。 读未提交:允许脏读,可以读取其他session中未提交的脏数据。 读已提交:不可读取其他session尚未提交的数据,只有其他session数据已提交才能读取到,为不重复读。 可重复读:该级别下可重复读,InnoDB引擎默认采用可重复读

MySQL事务原理浅析

别等时光非礼了梦想. 提交于 2019-12-02 02:44:46
前言 ​ 因为自己对数据的可靠性,可用性方面特别感兴趣,所以在MySQL事务方面看了很多资料,也看了很多博客,所以想到自己也写一篇博客整理整理自己所学内容,尽量用自己的语言解释得通俗易懂。 事务经典场景 ​ 在很多介绍事务的博客都会代入这样一个场景,先简单说说: ​ A给B转账100,A少100,B多100。如果A少100后系统崩溃怎么办?B的钱多不了,这样金钱总数凭空少了100。这里就需要用到事务了。 什么是事务? ​ 事务是恢复和并发控制的基本单位,事务有四个特性(ACID),原子性(Atomicity),一致性(Consistency),隔离性(Isolation),持久性(Durability)。本文主要围绕这四个特性展开介绍。 原子性 ​ 原子性就是不可拆分的特性,要么全部成功然后提交(commit),要么全部失败然后回滚(rollback)。若开启事务,在上述场景就不会出现 A少100 成功,B多100 失败 这种情况。MySQL通过Redo Log重做日志实现了原子性,在将执行SQL语句时,会先写入redo log buffer,再执行SQL语句,若SQL语句执行出错就会根据redo log buffer中的记录来执行回滚操作,由此拥有原子性。 一致性 ​ 一致性指事务将数据库从一种状态转变为下一种一致的状态。比如有一个字段name有唯一索引约束

Oracle中SQL命令的分类

纵饮孤独 提交于 2019-12-02 01:58:20
  写SQL命令命令可以不区分大小写,但最终执行的时候是大写,下面介绍的时候为了看起来 方便,所以使用了小写。建议开发时使用大写。 DQL-----数据库查询语言:比如select   1、查询表中的某个字段   语法:select 字段名1,字段名2 from 表名   比如: select first_name,last_name from employees(在employee表中查询first_name还有last_name)   2、查询所有表中的所有字段   语法:select 所有字段 from 表名 或者 select * from 表名   注意:*代表所有字段的意思,但是在实际开发中,写*的效率相比直接写字段名要低,开发时不建议使用 DML----数据操纵语言:向表中添加数据(insert),修改数据(update),删除数据(delete)      1、 insert: 向表中添加数据   ---------- 向表中所有字段添加数据 语法: insert into 表名 values( 值 1 ,值 2, ….) 比如: insert into t_User values(2,' 张三 ',33,'13691153161',' 男 ',to_date('1999-10-10','yyyy-mm-dd'));  ---------- 向表中有选择的添加数据

docker-swarm 命令

拜拜、爱过 提交于 2019-12-02 00:23:46
管理配置文件 docker config #docker config ls 查看配置文件 #将已有配置文件添加到docker 配置文件中 docker config create docker 配置文件名 本地配置文件 管理swarm 节点 docker node # 查看集群中的节点 - docker node ls # 将manager角色降级为worker - docker node demote 主机名 # 将worker角色升级为manager - docker node promote 主机名 # 查看节点的详细信息,默认json格式 - docker node inspect 主机名 # 查看节点信息平铺格式 - docker node inspect --pretty 主机名 # 查看运行的一个或多个及节点任务数,默认当前节点 - docker node ps # 从swarm中删除一个节点 - docker node rm 主机名 # 更新一个节点 - docker node update # 对节点设置状态(“active”正常|“pause”暂停|“drain”排除自身work任务) - docker node update --availability 管理敏感数据 docker secret # 服务栈,栈的形式,一般作为编排使用,格式与docker

Spring 注解方式实现 事务管理

不羁岁月 提交于 2019-12-01 20:31:12
使用步骤: 步骤一、在spring配置文件中引入<tx:>命名空间 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"> 步骤二、具有@Transactional 注解的bean自动配置为声明式事务支持 <!-- 事务管理器配置, Hibernate单数据源事务 --> < bean id ="defaultTransactionManager" class ="org.springframework.orm.hibernate3