JAVA单排日记-2020/2/24-MySQL-事务-基本介绍

  • 概念:如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败

例如1:
张三有1000元,李四有一千元

CREATE TABLE account(
	id INT PRIMARY KEY AUTO_INCREMENT,
	NAME VARBINARY(10),
	balance DOUBLE
);
INSERT INTO account (NAME,balance) VALUES ('zhangsan',1000),("lisi",1000);

SELECT*FROM account;

在这里插入图片描述
张三给李四转500,中间出现了错误语句,则会出现500元凭空消失的错误

UPDATE account SET balance = balance - 500 WHERE NAME="zhangsan";
出错了。。。
UPDATE account SET balance = balance + 500 WHERE NAME="lisi";

在这里插入图片描述
因此需要“事务”来处理

  • 操作:
  • 开启业务:start transaction;
  • 回滚:rollback;
  • 提交:commit;

例如2: 使用“事务”来处理
张三给李四转500之前开启事物,再转钱

TART TRANSACTION//开启事物

UPDATE account SET balance = balance - 500 WHERE NAME="zhangsan";
出错了。。。
UPDATE account SET balance = balance + 500 WHERE NAME="lisi";

此时还会出现500丢失的结果,但是是临时的
在这里插入图片描述
发现出现问题了,使用rollback回滚事物

START TRANSACTION;

UPDATE account SET balance = balance - 500 WHERE NAME="zhangsan";
出错了。。。
UPDATE account SET balance = balance + 500 WHERE NAME="lisi";
//发现出现问题了,回滚事物
ROLLBACK;

数据还会恢复到初始的状态
在这里插入图片描述
问题处理以后,使用commit提交事物

START TRANSACTION;
UPDATE account SET balance = balance - 500 WHERE NAME="zhangsan";
UPDATE account SET balance = balance + 500 WHERE NAME="lisi";
COMMIT;

这里是引用

  • 自动提交与手动提交
  • MySQY数据库是默认自动提交事务的(一条DML(增删改)语句之后,不用加commit,数据也会变化)
  • Oracle数据库默认是手动提交事务的
  • MySQY数据库修改默认提交方法
  • 查看默认提交方式:select @@autocommit;(1-自动,0-手动)
  • 修改为手动提交:set @@autocommit = 0;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值