事务的特性:ACID

  1. A,也就是原子性(Atomicity)
  2. C,就是一致性(Consistency)
  3. I,就是隔离性(Isolation)
  4. D,指的是持久性(Durability)

事务的控制

查看存储引擎是否支持事务:

  1. SHOW ENGINES

image.png

事务控制语句:

  1. START TRANSACTION 或者 BEGIN,作用是显式开启一个事务。
  2. COMMIT:提交事务。当提交事务后,对数据库的修改是永久性的。
  3. ROLLBACK 或者 ROLLBACK TO [SAVEPOINT],意为回滚事务。意思是撤销正在进行的所有没有提交的修改,或者将事务回滚到某个保存点。
  4. SAVEPOINT:在事务中创建保存点,方便后续针对保存点进行回滚。一个事务中可以存在多个保存点。
  5. RELEASE SAVEPOINT:删除某个保存点。
  6. SET TRANSACTION,设置事务的隔离级别。

事务有两种方式,分别为隐式事务和显式事务.

隐式事务实际上就是自动提交,Oracle 默认不自动提交,需要手写 COMMIT 命令,而 MySQL 默认自动提交,当然我们可以配置 MySQL 的参数:

  1. mysql> set autocommit =0; //关闭自动提交
  2. mysql> set autocommit =1; //开启自动提交

例子:

  1. CREATE TABLE test(name varchar(255), PRIMARY KEY (name)) ENGINE=InnoDB;
  2. BEGIN;
  3. INSERT INTO test SELECT '关羽';
  4. COMMIT;
  5. BEGIN;
  6. INSERT INTO test SELECT '张飞';
  7. INSERT INTO test SELECT '张飞';
  8. ROLLBACK;
  9. SELECT * FROM test;

image.png

completion_type 作用:

  1. CREATE TABLE test(name varchar(255), PRIMARY KEY (name)) ENGINE=InnoDB;
  2. SET @@completion_type = 1;
  3. BEGIN;
  4. INSERT INTO test SELECT '关羽';
  5. COMMIT;
  6. INSERT INTO test SELECT '张飞';
  7. INSERT INTO test SELECT '张飞';
  8. ROLLBACK;
  9. SELECT * FROM test;

image.png

  • completion=0,这是默认情况。也就是说当我们执行 COMMIT 的时候会提交事务,在执行下一个事务时,还需要我们使用 START TRANSACTION 或者 BEGIN 来开启。
  • completion=1,这种情况下,当我们提交事务后,相当于执行了 COMMIT AND CHAIN,也就是开启一个链式事务,即当我们提交事务之后会开启一个相同隔离级别的事务(隔离级别会在下一节中进行介绍)。
  • completion=2,这种情况下 COMMIT=COMMIT AND RELEASE,也就是当我们提交后,会自动与服务器断开连接。

总结

image.png