在我刚开始学习数据库事务时,一直就晕晕呼呼的,今天总结下。 主要回顾以下几个方面:
原子性(Atomicity,或称不可分割性):一个事务必须被视为一个不可分割的最小单元,整个事务中的所有操作要么全部提交成功,要么全部失败,对于一个事务来说,不可能只执行其中的一部分操作。
一致性(Consistency):事务将数据库从一种一致性转换到另外一种一致性状态,在事务开始之前和事务结束之后数据库中数据的完整性没有被破坏。
隔离性(Isolation,又称独立性):一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
持久性(Durability):一旦事务提交,则其所做的修改就会永久保存到数据库中。此时即使系统崩溃,已经提交的修改数据也不会丢失。
在 MySQL 命令行的默认设置下,事务都是自动提交的,即执行 SQL 语句后就会马上执行 COMMIT 操作。因此要显式地开启一个事务务须使用命令 BEGIN 或 START TRANSACTION,或者执行命令 SET AUTOCOMMIT=0,用来禁止使用当前会话的自动提交。
BEGIN 或 START TRANSACTION, 显式地开启一个事务;
COMMIT 或 COMMIT WORK,提交事务。COMMIT会对数据库进行的所有修改成为永久性的;
ROLLBACK 或 ROLLBACK WORK,回滚事务。回滚会结束用户的事务,并撤销正在进行的所有未提交的修改;
SAVEPOINT savepoint_name,SAVEPOINT 允许在事务中创建一个保存点,一个事务中可以有多个 SAVEPOINT;
RELEASE SAVEPOINT savepoint_name, 删除一个事务的保存点,当没有指定的保存点时,执行该语句会抛出一个异常;
ROLLBACK TO savepoint_name, 把事务回滚到标记点;
SET TRANSACTION, 用来设置事务的隔离级别。InnoDB 存储引擎提供事务的隔离级别有READ UNCOMMITTED(读未提交/RU)、READ COMMITTED(读已提交/RC)、REPEATABLE READ(可重复读/RR) 和 SERIALIZABLE(串行化/SZ)。
SET AUTOCOMMIT=0, 设置Mysql禁止自动提交事务
SET AUTOCOMMIT=1, 设置Mysql开启自动提交事务
SAVEPOINT 是在数据库事务处理中实现“子事务”(subTransaction),也称为嵌套事务的方法。事务可以回滚到 savepoint 而不影响 savepoint 创建前的变化, 不需要放弃整个事务。ROLLBACK 回滚的用法可以设置保留点 SAVEPOINT,执行多条操作时,回滚到想要的那条语句之前。
评论