事务介绍
事务是一组 DML 相关的语句(操作指令)集合,这些指令要么成功/不成功,满足如下性质:
- 原子性(Atomicity):操作不可分割,要么全成要么全败。
- 一致性(Consistency):事务前后数据库完整性不被破坏。
- 隔离性(Isolation):并发事务互不干扰,避免脏读、幻读等问题。
- 持久性(Durability):事务提交后,数据修改永久有效。
为什么要有事务
事务是为了服务应用层而存在。数据库是存储数据的地方,应用层对数据进行的操作必须保障数据的一致性。这些关注点(如修改数据是否成功、数据是否会丢失)应交给 MySQL 实现,因此它是一个服务机制。
事务的版本支持
在 MySQL 中只有使用了 InnoDB 数据库引擎的数据库或表才支持事务,MyISAM 不支持。
mysql> show engines; -- 表格显示
mysql> show engines \G -- 行显示
事务提交的两种方式
事务的提交方式常见的有两种:自动提交和手动提交。
查看事务提交方式:
show variables like 'autocommit';
用 SET 来改变 MySQL 的自动提交模式:
SET AUTOCOMMIT=0; -- 禁止自动提交
SET AUTOCOMMIT=1; -- 开启自动提交
事务的几种操作
开始一个事务
begin;
创建一个保存点
savepoint 自命名;
回滚到指定保存点
rollback to 保存点名字;
正常结束一个事务
注意:正常结束一个事务后,不支持回滚。
commit;


