事务

166 阅读1分钟

事务的概念

事务就是对数据操作的一系列指令集合。

事务的四个特性

  • 原子性

    事务的操作要么全部成功,要么全部失败,如果有一个指令失败,那么事务回滚到初始状态。

  • 一致性

    事务的执行不能破坏数据的完整性和一致性,比如总额是2000,那么无论怎么转账,总额应该保持不变。

  • 持久性

    一旦事务被提交了,那么无论停电还是宕机,数据都应该永久保存在数据库中。

  • 隔离性

    事务的操作应该是独立的,不能被其他事务干扰。

事务的隔离级别

  • 读未提交(Read uncommitted)
    • 可能导致脏读

      假如事务A修改了数据,此时并未提交,事务B读取数据之后事务A回滚了,那么事务B读取错误。

  • 读已提交(READ_COMMITTED)
    • 可能导致不可重复读

      假如事务A在查询数据,此时事务B修改事务并提交,事务A又来查询数据,此时数据不一致。

  • 可重复读(Repeatable read)
    • 可能导致幻读

      假如事务A将某张表的id从1变为2,此时事务B插入一条id为1的数据并提交,事务A再查询,发现没有全部修改,像是出了幻觉。

  • 串行化(Serializable)
    • 不会产生任何问题

MySQL支持四种级别,默认可重复读(Repeatable read)。

Oracle支持读已提交(READ_COMMITTED)和串行化(Serializable)两种类型,默认读已提交。