22、事务
1、案例引出事务:
张三转账给李四,必须保证张三账户减少8000,李四账户增加8000,这两项操作必须全部成功,
如何保证?需要事务
事务可以保证多个操作原子性,要么全成功,要么全失败。对于数据库来说事务保证批量的DML要么全成功,要么全失败。事务具有四个特征ACID
a) 原子性(Atomicity)
整个事务中的所有操作,必须作为一个单元全部完成(或全部取消)。
b) 一致性(Consistency)
在事务开始之前与结束之后,数据库都保持一致状态。
c) 隔离性(Isolation)
一个事务不会影响其他事务的运行。
d) 持久性(Durability)
在事务完成以后,该事务对数据库所作的更改将持久地保存在数据库之中,并不会被回滚。
2、事务的相关概念:
事务中存在一些概念:
a) 事务(Transaction):一批操作(一组DML)
b) 开启事务(Start Transaction)
c) 回滚事务(rollback)
d) 提交事务(commit)
e) SET AUTOCOMMIT:禁用或启用事务的自动提交模式
当执行DML语句是其实就是开启一个事务
关于事务的回滚需要注意:只能回滚insert、delete和update语句,不能回滚select(回滚select没有任何意义),对于create、drop、alter这些无法回滚.
事务只对DML有效果。
注意:rollback,或者commit后事务就结束了。
3、事务的提交与回滚演示
1) 创建表
create table user(
id int (11) primary key not null auto_increment ,
username varchar(30),
password varchar(30)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
2) 查询表中数据
3) 开启事务START TRANSACTION;
4) 插入数据
insert into user (username,password) values ('zhangsan','123');
5) 查看数据
6) 修改数据
7) 查看数据
8) 回滚事务
9) 查看数据 此时表中的数据在回滚以后就消失了,无论你进行列删除、更新、插入
4、自动提交模式
- 自动提交模式用于决定新事务如何及何时启动。
- 启用自动提交模式:
– 如果自动提交模式被启用,则单条DML语句将缺省地开始一个新的事务。
– 如果该语句执行成功,事务将自动提交,并永久地保存该语句的执行结果。
– 如果语句执行失败,事务将自动回滚,并取消该语句的结果。
– 在自动提交模式下,仍可使用START TRANSACTION语句来显式地启动事务。这时,一个事务仍可包含多条语句,直到这些语句被统一提交或回滚。
- 禁用自动提交模式:
– 如果禁用自动提交,事务可以跨越多条语句。
– 在这种情况下,事务可以用COMMIT和ROLLBACK语句来显式地提交或回滚。
- 自动提交模式可以通过服务器变量AUTOCOMMIT来控制。
- 例如:
mysql> SET AUTOCOMMIT = OFF;
mysql> SET AUTOCOMMIT = ON;
或
mysql> SET SESSION AUTOCOMMIT = OFF;
mysql> SET SESSION AUTOCOMMIT = ON;
show variables like '%auto%'; -- 查看变量状态
5、事务之间的隔离

浙公网安备 33010602011771号