一、定义
事务:一系列要发生的连续操作
事务安全:一种保护连续操作同时满足实现的一种机制
事务安全的意义:保证数据操作的完整性
事务的原理
事务在开启后,所有的操作都会临时保存到事务日志中,事务日志只有在commit 命令执行后,才会将数据同步到数据表,其他任何情况都会被清空(rollback,断电,断开连接)
二、事务操作
示例:
先创建一张账户表
create table my_account(
number char(16) not null unique comment "账户",
name varchar(20) not null,
money decimal (10,2) default 0.0 comment '账户余额'
) charset utf8;
--插入数据
insert into my_account (`number`,`name` ,`money` )values('0000000000000001','张三',1000),
('0000000000000002','李四',2000)
事务操作分为两种:自动事务和手动事务
2.1手动事务
操作流程
1.开启事务:告诉系统以下的操作(写),不要直接写到数据表中,先存放到事务日志
指令:
start transaction;
2.事务操作
李四向张三转账1000,李四账户减少1000,张三账户增加1000
(a)李四账户减少1000
update my_account set money = money - 1000 where id = 2;
查看数据表
select * from my_account
但用其他账户登录,李四账户没有改变
(b)张三账户增加1000块
update my_account set money = money + 1000 where id = 1;
(3)关闭事务
选择性的将日志文件的操作结果同步到数据表,或者直接清空操作日志(原来的操作全部清空)
(a)提交事务:同步数据(操作成功)commit
(b)回滚事务:直接清空日志表(操作失败)rollback
(4)提交事务
commit
回滚点
在某个操作成功完成之后,后续的操作有可能成功,有可能失败,但不管成功,还是失败,前面的操作都已经成功,可以在当前成功的位置,设置一个点,可以供后续失败操作返回到该位置,而不是返回所有操作,这个点就叫做回滚点.
- 设置回滚点语法:
savepoint 回滚点名字
- 回到回滚点语法:
rool back to 回滚点名字
2.2 自动事务
mysql 中默认都是自动事务,用户完成操作会立即同步到数据表中
自动事务处理通过 atuocommit 变量控制
show variables like 'atuocommit'
关闭自动提交
set atuocommit= off/0;