事务

一、定义

事务:一系列要发生的连续操作
事务安全:一种保护连续操作同时满足实现的一种机制
事务安全的意义:保证数据操作的完整性

事务的原理

事务在开启后,所有的操作都会临时保存到事务日志中,事务日志只有在commit 命令执行后,才会将数据同步到数据表,其他任何情况都会被清空(rollback,断电,断开连接)

事务_第1张图片
屏幕快照 2017-08-15 下午4.00.14.png

二、事务操作

示例:
先创建一张账户表

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

事务_第2张图片

但用其他账户登录,李四账户没有改变
(b)张三账户增加1000块

update my_account set money = money + 1000 where id = 1;
事务_第3张图片
屏幕快照 2017-08-15 下午3.25.21.png

(3)关闭事务
选择性的将日志文件的操作结果同步到数据表,或者直接清空操作日志(原来的操作全部清空)
(a)提交事务:同步数据(操作成功)commit
(b)回滚事务:直接清空日志表(操作失败)rollback

(4)提交事务

commit

回滚点

在某个操作成功完成之后,后续的操作有可能成功,有可能失败,但不管成功,还是失败,前面的操作都已经成功,可以在当前成功的位置,设置一个点,可以供后续失败操作返回到该位置,而不是返回所有操作,这个点就叫做回滚点.

  • 设置回滚点语法:
savepoint 回滚点名字
  • 回到回滚点语法:
rool back to 回滚点名字

2.2 自动事务

mysql 中默认都是自动事务,用户完成操作会立即同步到数据表中
自动事务处理通过 atuocommit 变量控制

show variables like 'atuocommit'

关闭自动提交

set atuocommit= off/0;

你可能感兴趣的:(事务)