【holm】MySQL事务的使用

事务

概述

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特性。

事务的执行过程:
【holm】MySQL事务的使用

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特性

  1. 原子性 (Atomicity )
    原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。

  2. 一致性( Consistency )
    事务必须使数据库从一个一致性状态变换到另外一个一致性状态。

  3. 隔离性 ( Isolation ) (使用锁机制保证隔离性)
    事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离

  4. 持久性 ( Durabilily )
    持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。

参考资料

上一篇:Flink SavePoint


下一篇:Flink State 有可能代替数据库吗?