数据库事物——基础篇

数据库事物——基础篇

1. 概述

在MySQL中,数据库事物支持是在引擎层实现的,我们知道,MySQL是一个支持多引擎的系统,但不是所有的引擎都支持事物,比如MySQL原生的MyISAM引擎就不支持事物,这也是MyISAM被InnoDB代替的重要原因之一;

本篇文章将以InnoDB为例来说明数据库事务!

1.为什么需要数据库事物

1. 银行转账例子

为什么需要数据库事务,下面来看一个比较典型的简单例子;

银行转账问题,假如A账户要给B账户转账¥1000,此时就要操作数据库了,如下图所示:
在这里插入图片描述

如上图,要分为两个步骤,那么很多问题就会发生在这,例如:

  • A账户减少¥1000的操作执行完成后,系统突然出现故障,导致B账户增加1000这个操作不能够完成;
  • 转账操作刚完成就发生系统崩溃,系统重启恢复时丢失了崩溃前的转账记录;
  • 同时又有另一个用户转账给B账户,由于同时对B账户进行操作,导致B账户金额出现异常;

那么将上述操作包含在一个数据库事物后,又是怎么保证解除那些问题的呢?对于上面的转账例子,可以将转账相关的所有操作包含在一个事务中

BEGIN TRANSACTION 
A账户减少100元
B账户增加100元
COMMIT
  • 当数据库操作失败或者系统出现崩溃,系统能够以事务为边界进行恢复 ,不会出现A账户金额减少而B账户未增加的情况;
  • 当有多个用户同时操作数据库时,数据库能够以事务为单位进行并发控制,使多个用户对B账户的转账操作相互隔离

事务使系统能够更方便的进行故障恢复以及并发控制,从而保证数据库状态的一致性。

2. 什么是数据库事物

定义:数据库事务是构成单一逻辑工作单元的操作集合
一个典型的数据库事务如下所示

BEGIN TRANSACTION  //事务开始
SQL1
SQL2
COMMIT/ROLLBACK   //事务提交或回滚

关于事务的定义有几点需要解释下:

  • 1.数据库事务可以包含一个或多个数据库操作,但这些操作构成一个逻辑上的整体。
  • 2.构成逻辑整体的这些数据库操作,要么全部执行成功,要么全部不执行。
  • 3.构成事务的所有操作,要么全都对数据库产生影响,要么全都不产生影响,即不管事务是否执行成功,数据库总能保持一致性状态。
  • 4.以上即使在数据库出现故障以及并发事务存在的情况下依然成立。

2. 数据库事务的基本操作

这里我们建一个测试表:

mysql> create table test(
    -> id int primary key auto_increment,
    -> name varchar(20),
    -> adress varchar(20) );

然后开始事物操作:

  • 事物的开始使用:start transaction ;

  • 事物中创建一个保存点使用:savepoint 保存点名 ;

  • 回到保存点:rollback to 保存点名 ;(这一步只能在commit前执行,否则会报错)

  • 当没有保存点时,可用rollback回到事物的起始点当使用rollback,也代表这

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值