一 什么是事务?
数据库中的事务是指对数据库执行一批操作,这些操作最终要么全部执行成功,要么全部失败,不会存在部分成功的情况。
举个例子
比如A用户给B用户转账100操作,过程如下:
如果在事务的支持下,上面最终只有2种结果:
- 操作成功:A账户减少100;B账户增加100
- 操作失败:A、B两个账户都没有发生变化
如果没有事务的支持,可能出现错:A账户减少了100,此时系统挂了,导致B账户没有加上100,而A账户凭空少了100。
二 事务的几个特性(ACID)
- 原子性(Atomicity)
事务的整个过程如原子操作一样,最终要么全部成功,或者全部失败,这个原子性是从最终结果来看的,从最终结果来看这个过程是不可分割的。
- 一致性(Consistency)
一个事务必须使数据库从一个一致性状态变换到另一个一致性状态。
从这段话的理解来看,所谓一致性,即,从实际的业务逻辑上来说,最终结果是对的、是跟程序员的所期望的结果完全符合的
- 隔离性(Isolation)
一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
- 持久性(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)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。