数据库事务
-
什么是事务:指数据库执行的一组操作(增删改)
要么全都执行,要么全部不执行 -
作用:保证数据的一致性,完整性
-
事务的特点(ACID特点)
1)原子性(atomicity):一个事务是不可分割的整体,
要么全都执行,要么全都不执行
2)一致性(consistency):事务执行完成后,数据库从一个一致性状态变成下一个一致性状态
3)隔离性(Isolation):不同的事务不会相互影响
4)持久性(Durability):一旦事务提交,对数据库的修改会被持久保存到磁盘中
5)示例:第一步:创建测试账户表
create table acct(
acct_no varchar(32),
acct_name varchar(32),
balance decimal(16,2)
);
insert into acct values (‘0001’,‘Jerry’,1000),(‘0002’,‘Tom’,2000);第二步:通过事务操作语句,观察事务提交,回滚的作用
start transaction; – 启动事务
update acct set balance = balance - 100 where acct_no = ‘0001’;-- 模拟扣付款人的金额
update acct set balance = balance + 100 where acct_no = ‘0002’;-- 模拟给收款人加金额
commit; – 事务提交,所修改的数据正式生效
rollback – 模第二次拟事务回滚
– 在执行commit之前,重新开启一个mysql客户端
– 查询acct表的余额(查看事务的隔离性)
6)如何操作事务- 启动事务:
显式启动:start transaction
隐式启动:执行insert,update ,delete 操作 - 提交事务:commit;
- 回滚:rollback;
7)使用事务的情况及先决条件
- 先觉条件:INNODB存储引擎支持事务
- 使用事务的情况:
一个操作涉及一组SQL语句(增删改语句)
需要这一组操作完成后,保证数据的一致性,完整性
8)事务对效率的影响:数据库事务降低数据库的性能
- 原因是为了保证数据的一致性,事务的隔离性
- 事务需要对数据进行加锁,如果有其他事务需要操作这部分加锁的数据,必须等待上一个事务结束(提交,回滚)
9)事务对哪些语句起作用
SQL语句按照功能可以分为四类:- 数据查询语言(DQL):查询数据,不会修改数据
- 数据定义语句(DDL):定义库/表/索引
- 数据操作语言(DML):对数据进行增,删,改
(数据库事务只对这一类语言起作用) - 数据控制语言(DCL):授权/吊销权限,事务管理
- 启动事务: