概述
Transactions are atomic units of work that can be committed or rolled back. When a transaction makes multiple changes to the database, either all the changes succeed when the transaction is committed, or all the changes are undone when the transaction is rolled back.
Database transactions, as implemented by InnoDB, have properties that are collectively known by the acronym ACID, for atomicity, consistency, isolation, and durability.
事务是mysql
工作时可以提交和回滚的原子单位。事务内的所有更改一起成功或者一起被撤销。
数据库事务由InnoDB
引擎实现,具有ACID
特性。
事务的执行过程:
在mysql
中使用事务
- 自动提交:
select @@autocommit
默认为1
- 显示关闭提交:
set autocommit = 0;
- 隐式关闭提交:
start transaction;
- 显示关闭提交:
- 提交:
- 显示:
commit
- 隐式:
begin
,set autocommit = 1;
,start transaction;
...- DDL:
create
.alter
,drop
...
- 显示:
- 回滚:
rollback
- 保存点:
savepoint 保存点名称
rollback to savepoint 保存点名称
release savepoint 保存点名称
- 如果保存点名称相同,旧的将被撤销
注意:在本事务中,即时还没有提交事务也可以查询到变更的数据(外部无法查询到新的数据)。
example
表结构:
name | type |
---|---|
id | varchar(20) |
name | varchar(20) |
START TRANSACTION; --开启事务
INSERT INTO table00 VALUES(0,"jet");
SAVEPOINT a;
INSERT INTO table00 VALUES(1,"hanniba");
SELECT * FROM table00; --查询结果为 0,jet 1,hanniba
ROLLBACK TO SAVEPOINT a;
SELECT * FROM table00; -- empty table
ROLLBACK;
INSERT INTO table00 VALUES(2,"wu");
COMMIT;
id | name |
---|---|
2 | wu |
事务的ACID特性
-
原子性 (Atomicity )
原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。 -
一致性( Consistency )
事务必须使数据库从一个一致性状态变换到另外一个一致性状态。 -
隔离性 ( Isolation ) (通过事务隔离级别和锁机制保证隔离性)
事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离 -
持久性 ( Durabilily )
持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。
参考资料
- mysql doc
- 课堂资料-_-