MySQL之事务

事务

事务(transaction)是数据库中执行同一业务多条SQL语句的工作单元,事务可以保证多条SQL语句全部执行成功或全部执行失败。

和事务相关的SQL语句:

begin: 开启事务
rollback: 回滚事务 把内存中的改动清除
commit: 提交事务 把内存中的改动一次性提交到磁盘中

验证事务:

  1. 创建表
 	create table user(
	id int primary key auto_increment,
	name varchar(10),
	money int,
	state varchar(5)
	);
  1. 插入数据
	insert into user values
	(null,'李雷',5000,'正常'),
	(null,'韩梅梅',50,'正常'),
	(null,'Lucy',10,'冻结');
  1. 李雷给Lucy转账SQL:
	update user set money=4000 where id=1 and state='正常';
	update user set money=1010 where id=3 and state='正常';
	select * from user;
  • 以上代码无事务保护,则导致数据库内部的数据李雷丢了1000块钱
  • 以下操作有事务保护的步骤:
  1. 开启事务:
	begin;
  1. 让李雷-1000
	update user set money=3000 where id=1 and state='正常';
  1. 让Lucy+1000
	update user set money=1010 where id=3 and state='正常';
  1. 因为一条成功一条失败 所以不能把内存中的改变提交到磁盘中,所以需要执行回滚指令,执行之前可以打开另外一个窗口查看数据库中的数据是否发生改变(变的是内存中的数据,数据库里面的数据并没发生改变)
	rollback;
  • 转账成功执行流程:
  1. 开启事务
	begin;
  1. 让李雷-1000
	update user set money=3000 where id=1 and state='正常';
  1. 让韩梅梅+1000
	update user set money=1050 where id=2 and state='正常';
  1. 由于转账业务的多条SQL全部执行成功 所以可以执行提交指令 把内存中的改动提交到磁盘中
	commit;

第二种开启事务的方式

数据库中事务默认是自动提交的

  1. 查看数据库自动提交的状态
	show variables like '%autocommit%';
  1. 修改自动提交的状态 0关闭 1 开启
	set autocommit=0;
  1. 修改李雷钱为50000
	update user set money=50000 where id=1;
  1. savepoint:保存回滚点
	set autocommit=1;
	李雷开始是50000
	begin;
	update user set money=10000 where id=1;
	savepoint s1
	update user set money=20000 where id=1;
	savepoint s2
	update user set money=30000 where id=1;
	rollback to s1;

总结事务相关指令:

  1. begin 开启事务
  2. rollback 回滚事务
  3. commit 提交事务
  4. 查看自动提交状态 show variables like '%autocommit%'
  5. 修改自动提交状态 set autocommit=0/1;
  6. 保存回滚点 savepoint s1;
  7. 回滚到回滚点 rollback to s1;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值