1、什么是事务
数据库事务(Database Transaction),是指作为单个逻辑工作单元执行的 一系列操作,要么完全地执行,要么完全地不执行。
简单的说:事务就是将一堆的SQL语句(通常是增删改操作)绑定在一起 执行,要么都执行成功,要么都执行失败,即都执行成功才算成功,否则 就会恢复到这堆SQL执行之前的状态。
2、事务的四大特性
已转账为例
一、原子性
一个事务(transaction)中的所有操作,要 么全部完成,要么全部不完成,不会结束在中间某个环节。即使事务在执 行过程中发生错误,也会被回滚(Rollback)到事务开始前的状态,就像这 个事务从来没有执行过一样。
即:事务中所有操作是不可再分割的原子单位。事务中所有操作要么 全部执行成功,要么全部执行失败。
二、一致性
在事务开始之前和事务结束以后,数据库 的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则, 这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工 作。
例如:转账业务,无论事务执行成功与否,参与转账的两个账户金额 之和在事务前后应该是保持不变的。
三、隔离性
数据库允许多个并发事务同时对其数据进行 读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而 导致数据的不一致。即:隔离性可以在事务并发时,让不同的事务隔离开 来,一个事务看不到另一个事务正在进行中的状态。
例如:在A事务中,查看另一B事务(正在修改张三的账户金额)中张三的 账户金额,要查看到B事务之前的张三的账户金额,要么查看到B事务之后 张三的账户金额。
1 事务1: 查询A、B账户金额之和 2 事务2: A转账给B 500元 3 A - 500 = 500 4 B + 500 = 1500
四、持久性
事务处理结束后,对数据的修改就是永久 的,即便系统故障也不会丢失。因为事务一旦提交,事务中所有的数据操 作都必须被持久化到数据库中,即使事务提交后,数据库马上崩溃,在数 据库重启时,也必须能保证通过某种机制恢复数据。
开启事务---A给B转账500元 A: 1000 - 500 = 500 (成功了) -- 在日志中记录,事务成功,A账户金额 更新为500 B: 1000 + 500 = 1500 (成功了) -- 在日志中记录,事务成功,B账户金 额更新为1500 结束事务---回滚/提交