事务的概念以及处理方式
2019-04-07 本文已影响0人
加一片柠檬233
1. 概念
数据库事务(Database Transaction),是指作为单个逻辑工作单元执行的一系列操作,要么完全执行,要么完全地不执行。
2.事务的特性(ACID)
- 原子性(Atomicity): 事务中的所有数据库操作是一个整体,是不可分割的,不会只是执行某一段数据库操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
- 一致性(Consistency): 如果一个事务原子地在一个一致地数据库中独立运行,那么在它执行之后,数据库的状态一定是一致的。
- 隔离性 (Isolation):数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable).
- 持久性(Durability): 事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
3. 使用
-
BEGIN 开始一个事务
-
ROLLBACK 事务回滚
-
COMMIT 事务确认
-
直接用 SET 来改变 MySQL 的自动提交模式:
SET AUTOCOMMIT=0 禁止自动提交
SET AUTOCOMMIT=1 开启自动提交
mysql> CREATE TABLE student (
`id` INT NOT NULL,
`name` VARCHAR(100) NOT NULL,
`age` INT NOT NULL,
`sex` VARCHAR(100) NOT NULL
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
mysql> select * from student; //empty
mysql> SET AUTOCOMMIT=0;
mysql> begin; //开始事务
mysql> INSERT INTO student VALUES(1,'张三',18,'男');
mysql> INSERT INTO student VALUES(2,'李四',20,'女');
mysql> commit; // 提交事务
mysql> select * from student;
+------+------+------+------+
| id | name | age | sex |
+------+------+------+------+
| 1 | 张三 | 18 | 男 |
| 2 | 李四 | 20 | 女 |
+------+------+------+------+
mysql> begin; //开始事务
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO student VALUES(3,'王五',19,'女');
mysql> rollback;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from student; // 因为回滚所以数据没有插入
+------+------+------+------+
| id | name | age | sex |
+------+------+------+------+
| 1 | 张三 | 18 | 男 |
| 2 | 李四 | 20 | 女 |
+------+------+------+------+