事务
事务
事务及其特征
-
事务(Transaction)是用来维护数据库完整性的,它能够保证一系列的MySQL操作要么全部执行,要么全不执行。
-
事务(Transaction)指的是一个操作序列,该操作序列中的多个操作要么都做,要么都不做,是一个不可分割的工作单位,是数据库环境中的逻辑工作单位,由DBMS(数据库管理系统)中的事务管理子系统负责事务的处理。
-
默认一句SQL语句就是一个事务
-
事务的特征(ACID)
-
原子性(Atomicity)
- 事务中的所有操作可以看做一个原子,事务是应用中不可再分的最小的逻辑执行体。要么全部执行,要么全不执行。
-
一致性(Consistency)
- 一致性是指事务执行的结果必须使数据库从一个一致性状态,变到另一个一致性状态。
-
隔离性(Isolation)
- 隔离性是指各个事务的执行互不干扰,任意一个事务的内部操作对其他并发的事务,都是隔离的。
-
持久性(Durability)
- 持久性指事务一旦提交,对数据所做的任何改变,都要记录到永久存储器中
-
事务的开启\回滚\提交
- 手动开启事务
start transaction;
- 开启事务后,在回滚或提交之前,都是操作的缓存中的数据,而不是数据库中的真实数据
- 回滚
rollback;
- 执行回滚后,从开始事务到回滚语句之间做的所有操作,都不会操作数据库中的真实数据
- 提交
commit;
- 执行提交后,从开启事务到提交语句之间执行的所有操作,都将一次性全部执行到真实数据库数据中
代码示例
-- 事务
-- 创建账户表
create table account(
id int primary key auto_increment,
uname varchar(10) not null,
balance double
);
-- 查看
select * from account;
-- 插入数据
insert into account values (null, "lili", 2000), (null, "xiaogang",2000);
-- 转账
update account set balance = balance - 200 where id = 1;
update account set balance = balance + 200 where id = 2;
-- 默认一条一句是一个事务,所以上面的操作是两个事务
-- 必须上面的两个操作,控制在一个事务中
-- 手动开启事务
start transaction;
update account set balance = balance - 200 where id = 1;
update account set balance = balance + 200 where id = 2;
-- 手动回滚,刚刚执行的操作全部取消
rollback;
-- 手动提交事务
commit;
-- 在回滚和提交之前,都是操作的缓存中的数据,而不是数据库中的真实数据