跳至主要內容

事务的概念

张威大约 2 分钟mysql事务

事务的概念

定义

InnoDB支持事务,而MyISAM不支持事务

一个事务是由一条或者多条对数据库操作的SQL语句所组成的一个不可分割的单元只有当事务中的所有操作都正常执行完了,整个事务才会被提交给数据库;如果有部分事务处理失败,那么事务就要回退到最初的状态,因此,事务要么全部执行成功,要么全部失败

所以记住事务的几个基本概念,如下:

  1. 事务是一组SQL语句的执行,要么全部成功,要么全部失败,不能出现部分成功,部分失败的结果。保证事务执行的原子性
  2. 事务的所有SQL语句全部执行成功,才能提交(commit) 事务,把结果写回磁盘
  3. 事务执行过程中,有SQL出现错误,那么事务必须要回滚(rollback) 到最初的状态

代码上的事务操作

比如转账业务需要多条SQL语句共同完成,只有这些SQL都执行成功才算业务成功了

  • 如果这2句SQL都成功了,那么

  • 如果其中任意一条SQL由于停电,或者服务器出错,导致SQL执行异常,那事务就没有提交,,数据将恢复到事务开始前的状态

这是存储引擎来保证的(redo log和undo log保证的)

查看当前数据库支持的存储引擎

show engines;

修改提交方式

数据库引擎可以通过命令临时修改,或者通过配置文件永久修改事务的提交方式

select @@autocommit;
set @@autocommit=0; #事务手动提交
set autocommit=0; #上面一样
  • @@autocommit为1表示,为0表示事
  • 这种修改只对当前会话session有效
,一般来说,我们的事务由多条SQL组成,所以我们设置为手动提交。业务都成功,则提交这个事务;如果业务中间出现失败,就回滚1个事务