数据库事务

MySQL : 事务处理

一曲冷凌霜 提交于 2020-03-01 08:51:16
【事务】一组SQL语句操作单元, 组内所有SQL语句,完成一个业务 。 若整组成功,意味着组内的全部操作都成功; 反之,若其中任何一条语句失败,意味着整个操作都失败。 操作失败,意味着整个过程都是没有意义的,应使数据库回到操作前的初始状态。 【point】 1. 失败后,能回到开始位置; 2. 成功之前,其他用户(进程、规划)不能看到操作内的修改。 【思路】在一组操作之前,设计一个记号(备份点)。 【实现】利用 innodb 存储引擎的“事务日志”功能。 执行分为2个阶段: 1. 执行阶段; 2. 将执行结果提交给数据库的阶段; 其中,事务日志便是将执行阶段的结果保存,若用户选择提交,才将执行结果提交给数据库。 (默认的执行方式:自动提交) 需要关闭自动提交功能(存在一个系统变量,autocommit 可以对自动提交进行配置) 1 set autocommit = 0 ; // 0 意味着关闭自动提交功能;1 意味着开启 若成功,执行 commit 提交结果; 若失败,执行 rollback ,回到起始位置。 -------------------------------------------------------------------------- 【 常用的事务指令 】 1. start transaction 开启事务(作用:关闭自动提交)。 特点:若事务结束了

mysql事务

只谈情不闲聊 提交于 2020-03-01 08:48:54
事务:一组sql语句操作单元,组内所有sql语句完成一个业务.注意只有innodb和bdb可以使用事务安全 如果整组成功则意味着全部sql语句都实现。如果其中任何一个失败,意味着整个操作失败。失败意味着整个过程都是没意义的,数据库应该回到最初始的状态。上面的特性,就是事务。 如何处理:失败后,可以回到开始位置、没有成功之前,别的用户(进程,对话)是不能看到操作内的数据修改的 思路:就是在一组操作之前,设计一个记号(备份点)。操作成功就让别人看到数据的修改,如果失败别人就不能看到修改,而且回到记号位置。 实现:利用innodb存储引擎的事务日志功能。 sql执行分为2个阶段:一个是执行阶段一个是将执行结果提交到数据库的阶段。其中我们的事务日志,就是保存执行阶段的结果。如果可以用,则将执行的结果提交到数据库 数据库默认的执行方式是:自动提交(autocommit)。执行完后自动完成提交工作。想要完成事务安全就需要关闭自动提交功能。set autocommit=0; 例:交班费业务30元:包含两条sql语句update `sm_student` set `s_money`=`s_money`-30 where id=1; update `class` set `c_money`=`c_money`+30 where id=1;

事务与连接池

泪湿孤枕 提交于 2020-03-01 06:04:45
事务的概念:   事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功。 数据库开启事务的命令为:   start transaction 开启事务。   rollback 回滚事务。   commit 提交事务。 数据库中默认的事务开启状态:   MySQL中事务默认自动提交的,每当执行一条SQL,就会提交一个事务 (一条SQL 就是一个事务);Oracle 中事务默认不自动提交,需要在执行SQL 语句后 通过commint 手动提交事务。 数据库中存在一个设置自动提交的变量 ,通过 show variables like '%commit%';   得到结果:autocommint = on,说明自动提交被开启。   关闭自动提交: set autocommit = off 或 set autocommit = 0   如果设置autocommit = off,则之后每条SQL 都会处于一个事务中,相当于每条SQL执行前 都执行 start transaction,必须执行commit才会对数据库执行修改。( Oracle中 autocommit 默认值为 off。) 在jdbc中使用事务:   Connection.setAutoCommit(false);   Connection.rollback();   Connection.commit();

mysql中的事务

落花浮王杯 提交于 2020-03-01 06:02:21
mysql中的事务 1.mysql中的innodb存储引擎才支持事务。 2.事务就是一组sql语句,只要全部的sql语句执行成功,事务才会提交(COMMIT),只要有一条sql语句执行失败,则事务不成功,需要回滚(rolback)。 3.对于事务而言,它需要满足ACID特性,下面就简要的说说事务的ACID特性。   1)A,表示原子性;原子性指整个数据库事务是不可分割的工作单位。只有使事务中所有的数据库操作都执行成功,整个事务的执行才算成功。事务中任何一个sql语句执行失败,那么已经执行成功的sql语句也必须撤销,数据库状态应该退回到执行事务前的状态;   2)C,表示一致性;也就是说一致性指事务将数据库从一种状态转变为另一种一致的状态,在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏;   3)I,表示隔离性;隔离性也叫做并发控制、可串行化或者锁。事务的隔离性要求每个读写事务的对象与其它事务的操作对象能相互分离,即该事务提交前对其它事务都不可见,这通常使用锁来实现;   4)D,持久性,表示事务一旦提交了,其结果就是永久性的,也就是数据就已经写入到数据库了,如果发生了宕机等事故,数据库也能将数据恢复。 4.默认的事务都是开启的 可以通过 set autocommit = 0 取消自动提交事务。 5.可以为不同的地方设置回滚点 设置回滚点:save point 保存点名称

MySQL存储过程之事务管理

浪尽此生 提交于 2020-03-01 06:01:17
ACID:Atomic、Consistent、Isolated、Durable 存储程序提供了一个绝佳的机制来定义、封装和管理事务。 1,MySQL的事务支持 MySQL的事务支持不是绑定在MySQL服务器本身,而是与存储引擎相关: MyISAM:不支持事务,用于只读程序提高性能 InnoDB:支持ACID事务、行级锁、并发 Berkeley DB:支持事务 隔离级别: 隔离级别决定了一个session中的事务可能对另一个session的影响、并发session对数据库的操作、一个session中所见数据的一致性 ANSI标准定义了4个隔离级别,MySQL的InnoDB都支持: READ UNCOMMITTED:最低级别的隔离,通常又称为dirty read,它允许一个事务读取还没commit的数据,这样可能会提高性能,但是dirty read可能不是我们想要的 READ COMMITTED:在一个事务中只允许已经commit的记录可见,如果session中select还在查询中,另一session此时insert一条记录,则新添加的数据不可见 REPEATABLE READ:在一个事务开始后,其他session对数据库的修改在本事务中不可见,直到本事务commit或rollback。在一个事务中重复select的结果一样,除非本事务中update数据库。 SERIALIZABLE

Python Mysql 数据库操作

自闭症网瘾萝莉.ら 提交于 2020-03-01 02:42:10
本文实例讲述了python中MySQLdb模块用法。分享给大家供大家参考。具体用法分析如下: MySQLdb其实有点像php或asp中连接数据库的一个模式了,只是MySQLdb是针对mysql连接了接口,我们可以在python中连接MySQLdb来实现数据的各种操作。 python连接mysql的方案有oursql、PyMySQL、 myconnpy、MySQL Connector 等,不过本篇要说的确是另外一个类库MySQLdb,MySQLdb 是用于Python链接Mysql数据库的接口,它实现了 Python 数据库 API 规范 V2.0,基于 MySQL C API 上建立的。可以从:https://pypi.python.org/pypi/MySQL-python 进行获取和安装,而且很多发行版的linux源里都有该模块,可以直接通过源安装。 一、数据库连接 MySQLdb提供了connect方法用来和数据库建立连接,接收数个参数,返回连接对象: 复制代码 代码如下: conn=MySQLdb.connect(host="localhost",user="root",passwd="jb51",db="test",charset="utf8") 比较常用的参数包括: host:数据库主机名.默认是用本地主机 user:数据库登陆名.默认是当前用户 passwd

并发操作引发的问题以及封锁协议

牧云@^-^@ 提交于 2020-02-29 22:22:27
并发操作可能破坏事务的隔离性,带来的数据不一致性包括三类: 1) 丢失修改 2) 不可重复读 3) 读“脏”数据 锁 是网络数据库中的一个非常重要的概念,当多个用户同时对数据库并发操作时,会带来数据不一致的问题,所以,锁主要用于 多用户环境下保证数据库完整性和一致性 。 数据库锁出现的目的: 处理并发问题 从 数据库系统 角度,基本的锁类型有两种: 排它锁(Exclusive Lock) 和 共享锁(Shared Lock) . 排它锁(X锁) ,也称为写锁,表示对数据进行写操作。 当事务T对数据A加上X锁时,只允许事务T读取和修改数据A 共享锁(S锁) ,也称为读锁,用于所有的只读数据操作。 当事务T对数据A加上S锁时,其他事务只能再对数据A加S锁,而不能加X锁,直到T释放A上的S锁。 若事务T对数据对象A加了S锁,则T就可以对A进行读取,但不能进行更新(读锁),在T释放A上的S锁以前,其他事务可以再对A加S锁,但不能加X锁,从而可以读取A,但不能更新A。 封锁协议 :在运用X锁和S锁对数据对象加锁时,还需要约定一些规则 ,例如何时申请X锁或S锁、持锁时间、何时释放等。称这些规则为封锁协议(Locking Protocol)。对封锁方式规定不同的规则,就形成了各种不同的封锁协议。 1)一级封锁协议 一级封锁协议是:事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放

mysql之事务

早过忘川 提交于 2020-02-29 19:23:52
mysql事务简单来说就是数据库的数据进行一系列的操作。例如insert,delete等等,而这些语句组成的对数据库的操作就是事务。 mysql事务有4大特性ACID:原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。 原子性(Atomicity):一个事务的操作要不全部完成,要不全部不完成。不会结束在某个环节。事务会在发生错误时回滚(rollback)到事务前状态。 一致性(Consistency):在事务开始前和结束后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合数据库表预设的规则。包含资料精确度,串联型等等。 隔离性(Isolation):数据库允许多个并发事务同时对数据进行读取和修改的能力。隔离性可以防止多个事务并发执行时由于交叉执行导致数据的不一致。 持久性(Durability):事务在提交之后,其修改的数据将永久保留在数据库中。 事务控制 使用事务功能也只能是支持事务的引擎才可以。 启动:START TRANSACTION 或者begin 提交:COMMIT 回滚:ROLLBACK mysql默认的是自动提交功能,也就是说在使用insert,delete,update的时候,执行一条,提交一条。 如果操作取消的话,我们还将一条条的删除。事务就是解决这一问题

事务的四大特性

不打扰是莪最后的温柔 提交于 2020-02-29 15:48:56
1. 事务的四大特性 事务具有4个基本特征,分别是:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Duration),简称ACID ① 原子性 事务的原子性是指事务必须是一个原子的操作序列单元。事务中包含的各项操作在一次执行过程中,只允许出现两种状态之一,要么都成功,要么都失败 任何一项操作都会导致整个事务的失败,同时其它已经被执行的操作都将被撤销并回滚,只有所有的操作全部成功,整个事务才算是成功完成 ② 一致性(Consistency) 事务的一致性是指事务的执行不能破坏数据库数据的完整性和一致性,一个事务在执行之前和执行之后,数据库都必须处以一致性状态。 比如:如果从A账户转账到B账户,不可能因为A账户扣了钱,而B账户没有加钱 ③ 隔离性 事务的隔离性是指在并发环境中,并发的事务是互相隔离的,一个事务的执行不能被其它事务干扰。也就是说,不同的事务并发操作相同的数据时,每个事务都有各自完整的数据空间。 一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务是不能互相干扰的 ④ 持久性(Duration) 事务的持久性是指事务一旦提交后,数据库中的数据必须被永久的保存下来。即使服务器系统崩溃或服务器宕机等故障。只要数据库重新启动,那么一定能够将其恢复到事务成功结束后的状态 在事物进行过程中,未结束之前

Spring基础内容一

人盡茶涼 提交于 2020-02-29 11:14:11
1.Spring是什么? Spring就是用来解决对象的创建和对象之间的依赖关系的 这样一门技术 。 Spring能干什么? 1>:创建对象 2>:依赖关系 3>:为service提供事务 4>:整合我们的传统开发框架 2.事务: 1>:粗粒度事务 只能够对方法进行添加事务 这种称为粗粒度事务( Spring的事务只能够是粗粒度的事务 ) 以后我们在给访问数据库添加事务的时候是不会将事务写到dao层上的, 因为一个动作是否完成取决于业务逻辑是否完成 ,所以事物都是添加在service上的 2>:细粒度事务 就是一个事务能够对我们的程序的某几行提供的事务 3>: 事务的分类 1>:本地事务 就是只是对一个数据库添加的事务, 我们目前学习的都叫本地的事物 2>:全局事务 举例:银行转账 --中国银行给建设银行转钱 。 这个是两个不同的数据库 ,要同时保证在这两 个表中的操作能够顺利的进行,就必须要使用全局事务 3.Spring的模块图( 7个 ) 1.Spring AOP模块 AOP:面向切面的编程 就是将重复代码抽取出来形成切面类 ,然后当我们程序运行的时候,通过 动态代理或者cglib代理来完成代码的自动植入 的这样一个编程思想 就叫做面向切面的编程 2.Spring ORM模块 主要是提供了对Hibernate/MyBatis/JDO其他ORM框架整合的支持(对象关系映射) 3