简介
事务是一个最小的不可再分的工作单元;通常一个事务对应一个完整的业务。在SQL层面可以理解为一个事务,是由多条SQL组成用以完成一个业务功能的共同体,事务影响到SQL的CRUD等操作。仅INNODB搜素引擎支持事务,在MYISAM中不支持事务,但在MYISAM中使用事务操作如BEGIN和COMMIT不会报错,使用ROLLBACK无效果(不能回滚)。如果发现在代码中使用了事务但不生效的情况,可以优先查看使用到的表是否均已经使用到了事务。MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!

  • 一组数据操作执行步骤,这些步骤被视为一个工作单元     
    -- 用于对多个语句进行分组     
    -- 可以在多个客户机并发访问同一个表中的数据时使用     
  • 所有步骤都成功或都失败     
    -- 如果所有步骤正常,则执行     
    --如果步骤出现错误或不完整,则取消

事务ACID 

  • Atomic(原子性)     
    所有语句作为一个单元全部成功执行或全部取消。
  • Consistent(一致性)     
    如果数据库在事务开始时处于一致状态,则在执行该 事务期间将保留一致状态。
  • Isolated(隔离性)     
    事务之间不相互影响。
  • Durable(持久性)     
    事务成功完成后,所做的所有更改都会准确地记录在 数据库中。所做的更改不会丢失。

事务处理流程举例 


事务SQL控制语句

  • BEGIN 或 START TRANSACTION 显式地开启一个事务;

  • COMMIT 也可以使用 COMMIT WORK,不过二者是等价的。COMMIT 会提交事务,并使已对数据库进行的所有修改成为永久性的;

  • ROLLBACK 也可以使用 ROLLBACK WORK,不过二者是等价的。回滚会结束用户的事务,并撤销正在进行的所有未提交的修改;

  • SAVEPOINT identifier,SAVEPOINT 允许在事务中创建一个保存点,一个事务中可以有多个 SAVEPOINT;

  • RELEASE SAVEPOINT identifier 删除一个事务的保存点,当没有指定的保存点时,执行该语句会抛出一个异常;

  • ROLLBACK TO identifier 把事务回滚到标记点;

  • SET TRANSACTION 用来设置事务的隔离级别。InnoDB 存储引擎提供事务的隔离级别有READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ 和 SERIALIZABLE。

MYSQL 事务处理主要有两种方法

1、用 BEGIN, ROLLBACK, COMMIT来实现

  • BEGIN 开始一个事务
  • ROLLBACK 事务回滚
  • COMMIT 事务确认

2、直接用 SET 来改变 MySQL 的自动提交模式:

  • SET AUTOCOMMIT=0 禁止自动提交
  • SET AUTOCOMMIT=1 开启自动提交
     

Autocommit模式设置

  • 在MySQL5.5开始,开启事务时不再需要begin或者start transaction语句。并且,默认是开启了Autocommit模式,作为一个事务隐式提交每个语句。         
  • 在有些业务繁忙企业场景下,这种配置可能会对性能产生很大影响,但对于安全性上有很大提高。
  • 将来,我们需要去权衡我们的业务需求去调整是否自动提交。
  • 我们可以通过以下命令进行修改关闭(0是关闭,1是开启):     
    SET GLOBAL AUTOCOMMIT=0;   --所有新建会话     
    SET SESSION AUTOCOMMIT=0;  --当前会话     
    SELECT @@AUTOCOMMIT;      -- 查看设置结果
  • 我们也可以修改配置文件让其永久生效:     
    vi /application/mysql/my.cnf
    [mysqld]
    ​​​​​​​AUTOCOMMIT=0

     

其他触发隐式commit的情况 

  • 用于隐式提交的 SQL 语句:     
    START TRANSACTION     
    SET AUTOCOMMIT = 1
  • 导致提交的非事务语句:     
    DDL语句:ALTER、CREATE 和 DROP     
    DCL语句:GRANT、REVOKE 和 SET PASSWORD     
    锁定语句:LOCK TABLES 和 UNLOCK TABLES 
  • 导致隐式提交的语句示例:     
    TRUNCATE TABLE     
    LOAD DATA INFILE     
    SELECT FOR UPDATE
最后修改于 2019-08-08 11:02:42
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付
上一篇