头图

一 什么是事务?

数据库中的事务是指对数据库执行一批操作,这些操作最终要么全部执行成功,要么全部失败,不会存在部分成功的情况。

举个例子

比如A用户给B用户转账100操作,过程如下:

如果在事务的支持下,上面最终只有2种结果:

  1. 操作成功:A账户减少100;B账户增加100
  2. 操作失败:A、B两个账户都没有发生变化

如果没有事务的支持,可能出现错:A账户减少了100,此时系统挂了,导致B账户没有加上100,而A账户凭空少了100。

二 事务的几个特性(ACID)

  1. 原子性(Atomicity)

事务的整个过程如原子操作一样,最终要么全部成功,或者全部失败,这个原子性是从最终结果来看的,从最终结果来看这个过程是不可分割的。

  1. 一致性(Consistency)

一个事务必须使数据库从一个一致性状态变换到另一个一致性状态。

从这段话的理解来看,所谓一致性,即,从实际的业务逻辑上来说,最终结果是对的、是跟程序员的所期望的结果完全符合的

  1. 隔离性(Isolation)

一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。

  1. 持久性(Durability)

一个事务一旦提交,他对数据库中数据的改变就应该是永久性的。当事务提交之后,数据会持久化到硬盘,修改是永久性的。

三 事务类型

GBase中事务默认是隐式事务,执行insert、update、delete操作的时候,数据库自动开启事务、提交或回滚事务。开启隐式事务是由变量autocommit控制。事务分为隐式事务和显式事务。

隐式事务,事务自动开启、提交或回滚。

显式事务,事务需要手动开启、提交或回滚,由开发者自己控制。

四 事务标准语法

[START TRANSACTION | BEGIN] [COMMIT] [ROLLBACK]

START TRANSACTION | BEGIN

开始一项新的事务。

COMMIT

提交当前事务,使变更成为永久变更。

ROLLBACK

回滚当前事务,取消其变更。

五 示例

gbase> create table t1(a int);

Query OK, 0 rows affected (Elapsed: 00:00:00.00)

gbase>start transaction;

Query OK, 0 rows affected (Elapsed: 00:00:00.00)

gbase> insert into t1 values(10);

Query OK, 1 row affected (Elapsed: 00:00:00.00)

gbase> commit;

Query OK, 0 rows affected (Elapsed: 00:00:00.00)

gbase> SELECT * from t1;

| a |

| 10 |

1 row in set (Elapsed: 00:00:00.00)

gbase> begin;

Query OK, 0 rows affected (Elapsed: 00:00:00.00)

gbase> insert into t1 values(200);

Query OK, 1 row affected (Elapsed: 00:00:00.01)

gbase> rollback;

Query OK, 0 rows affected (Elapsed: 00:00:00.00)

gbase> SELECT * from t1;

| a |

| 10 |

1 row in set (Elapsed: 00:00:00.01)


GBase数据库
1 声望2 粉丝

GBase数据库知识分享