目录

MySQL数据库之事务

基本概念

mysql中,事务其实是一个最小的不可分割的工作单元。事务能够保证一个业务的完整性。

事务的四大特征(ACID):

  • A 原子性:事务是最小的单位,不可以在分割。
  • C 一致性:事务要求,同一事务中的 sql 语句,必须保证同时成功或者同时失败。
  • I 隔离性:事务1 和 事务2 之间是具有隔离性的。
  • D 持久性:事务一旦结束(commit,rollback),就不可以返回。

基本操作

  1. 事务开启:

    1. 修改默认提交 set autocommit=0;
    2. begin;
    3. start transaction;
  2. 事务手动提交: commit;

  3. 事务手动回滚: rollback;

事务的隔离性

类别

  1. read uncommitted; 读未提交的 如果有事务a,和事务b,a事务对数据进行操作,在操作的过程中,事务没有被提交,但是b可以看见a操作的结果。 一个事务读到了另外一个事务没有提交的数据,就叫做脏读。
  2. read committed; 读已经提交的 虽然我只能读到另外一个事务提交的数据,但还是会出现问题,就是读取同一个表的数据,发现前后不一致。
  3. repeatable read; 可以重复读 事务a和事务b 同时操作一张表,事务a提交的数据,也不能被事务b读到,就可以造成幻读。
  4. serializable; 串行化 串行化问题是,性能特差!!!

相关操作

  1. 查看数据库的隔离级别
    • 系统级别的 select @@global.transaction_isolation;
    • 会话级别的 select @@transaction_isolation;
    • mysql 默认隔离级别 REPEATABLE-READ
  2. 修改隔离级别
    • set global transaction isolation level read uncommitted;
  3. 对比
    • 隔离级别越高,性能越差: READ-UNCOMMITTED > READ-COMMITTED > REPEATABLE-READ > SERIALIZABLE;
    • mysql 默认隔离级别是 REPEATABLE-READ
    • 实际开发中,一般都是使用默认,但是幻读问题我们需要解决!