一、事务的定义
一个事务(Transaction)是有一条或者多条对数据库操作的SQL语句所组成的一个不可分割的整体。只有事务中的所有操作都操作完成,才将整个事务提交的数据库,如果执行过程中有部分事务失败,那么事务就要回滚到最初的状态,也就是事务具有原子性。因此,事务要么全部执行完成,要么全部不执行。
为什么要使用事务呢?
直白的说就是可以有反悔的机会,数据库的操作具有持久性,所以使用事务后,一旦出现操作错误,则可以有机会恢复,重新操作,以免造成数据紊乱。
- 经典的事务案例:银行转账问题
二、事务的特征(ACID)
1. 原子性(Atomicity)
事务是一个不可分割的整体,即对数据的修改要么全部执行,要么全不执行,不存在部分事务执行完成。
例如:银行转账是一个完整的业务,可以看作是转入、转出两个部分,当两个部分都完成,才可以认为是转账成功,不能只完成其中一个,即不能部分执行。
2. 一致性(Consistency)
一个事务执行前和执行后,数据库的数据必须保持一致性的状态。
例如:银行转账问题,A向B转账,A账户金额减少,B账户的金额增长,整个系统中金额不发生改变,满足了一致性。
3. 隔离性(Isolation)
当两个或者多个事务并发执行时,为了保证数据的安全性,从而将一个事务的内部操作与其他的事务的操作隔离开,不被其他的事务所看到。
4. 持久性(Durability)
事务完成之后,对数据库中的数据修改是永久性的,即使数据库出现故障重启,也应该恢复数据。
三、事务的基本操作
1. 查看事务是否自动提交
select @@autocommit;
- MySQL事务默认为自动提交。
- 1:自动事务提交 0:表示手动事务提交。
2. 修改是否自动提交
set autocommit = 0;
- 使用set autocomit=0操作,设置事务为手动提交。
3. 事务操作
3.1 开启事务(start transaction)
begin;
start transaction;
- begin和start transaction命令开启一个事务。
3.2 事务提交(commit)
commit;
- 当事务中所有的SQL执行完成后,通过commit将事务提交到数据库。
3.3 事务回滚(rollback)
- 在事务执行过程中当有SQL执行失败将事务回滚,回滚到最初状态。
注意:直接退出客户端,事务中的变更不会默认保存。
3.4 保存点(savepoint point1)
- savepoint point1 设置一个保存点为point1的保存点
- rollback to point1:事务回滚到保存点1
以上都是学习过程中的知识点总结,如果有错误或者有疑问,欢迎一起交流吖~~ /手动抱拳/