面向对象-mysql事务操作

一、事务操作的概念

1、概念 (银行转账,必须一方钱转出,另一方钱接收到了,才算完成事务)

在数据库中,事务是指一组逻辑操作单元,使数据从一种状态变换到另一种状态。

为确保数据库中数据的一致性,事务的操作应该是流畅完成的,中间不能失败,一旦有操作失败,那么回滚到开始事务的状态

2、特点

原子性:指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
一致性:事务必须使数据库从一个一致性状态变换到另一个一致性状态。(数据不被破坏
隔离性:一个事务的执行不能被其他事务干扰,一个事务内部的操作及使用的数据对并发的事务也是隔离的。每一个事务都存在一个事务空间,彼此不干扰
持久性一个事务一旦被提交,它对数据库的改变就是永久性的,接下来的其他操作和数据库故障不应该对其有任何影响。

二、事务的操作

--事务操作
--创建表
create table account(
id int unsigned not NULL primary key,
name varchar(20),
money int
);

--插入数据
insert into account values(1001,"张三",2000),(1002,"李四",5000),(1003,"王五",1000);

--李四给王五转500
update account set money = money - 500 where id = 1002;

--停电了,再次登录,数据出错,一个人少500,另一个人没增加
--update account set money = money + 500 where id = 1003;


--开启事务(需要同时执行的数据)
start transaction;

--李四给王五转500
update account set money = money - 500 where id = 1002;

--查询数据
select * from account;     --李四少了500  看到的结果经过了事务日志 实际上没有修改

--王五要增加500
update account set money = money + 500 where id = 1003;      --还是在缓存中

--退出数据库,再次登录,数据并没有被修改

--提交   数据库被真正修改
commit;

--回滚点(在重要的执行完成命令前添加回滚点,防止后续命令出错)
--开启事务
start transaction;

--张三转出500
update account set money = money - 500 where id = 1001;

--回滚点设定张三转出后的点
savepoint sp1;

--李四转出500
update account set money = money - 500 where id = 1002;

--回滚点设定李四转出后的点
savepoint sp2;

--王五增加1000
update account set money = money + 500 where id = 1003;  --只增加了500,要撤回

--回滚到sp2
rollback to sp2;

--王五增加1000
update account set money = money + 1000 where id = 1003;

--提交事务
commit;

禁止自动提交:set autocommit=0

开启自动提交:set autocommit=1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值