MYSQL------------事务

1.什么是事务

事务:事务(TRANSACTION)是一种机制、一个操作序列,包含了一组数据库操作命令,并且把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库操作命令要么都执行,要么都不执行。

事务是一个不可分割的工作逻辑单元 。

转账过程就是一个整体 它需要两条UPDATE语句来完成,这两条语句是一个整体 如果其中任一条出现错误,则整个转账业务也应取消,两个账户中的余额应恢复到原来的数据,从而确保转账前和转账后的余额不变,即都是1001元

2.事务的特性

事务必须具备以下四个属性,简称ACID 属性

(1)原子性(Atomicity)

事务的各步操作是不可分的(原子的),要么都执行,要么都不执行

(2)一致性(Consistency)

当事务完成时,数据必须处于一致状态

(3)隔离性(Isolation)

并发事务之间彼此隔离、独立,它不应以任何方式依赖于或影响其他事务

(4)持久性(Durability)

事务完成后,它对数据库的修改被永久保持

3.MySQL事务处理

MySQL中支持事务的存储引擎有InnoDB和BDB。

方法1:用 BEGIN, COMMIT,ROLLBACK来实现。

BEGIN ;   #开始事务,显式地标记一个事务的起始点
COMMIT ; #提交事务,标志一个事务成功提交。
ROLLBACK; #回滚事务,清除自事务起始点至该语句所做的所有数据更新,将数据状态回滚到事务开始前,并释放由事务控制的资源。

方法2:直接用 SET 来改变 MySQL 的自动提交模式。

默认情况下,每条单独的SQL语句视为一个事务
关闭默认提交状态后,可手动开启、关闭事务
 SET autocommit = 0|1;
值为0:关闭自动提交
值为1:开启自动提交

实例代码展示

程序场景

银行转账问题 假定资金从账户A转到账户B,至少需要两步 账户A的资金减少 然后账户B的资金相应增加

-- 正常情况 
-- 张三-500 
UPDATE BANK SET MONEY = MONEY-500 WHERE ID = 1
-- 李四+500
UPDATE BANK SET MONEY = MONEY+500 WHERE ID = 2
-- 提交
COMMIT;

-- MYSQL默认事务自动提交
-- 1.设置不自动提交 直接用SE来改变Mysql的自动提交模式
-- 关闭默认提交状态后,可手动开启,关闭事务
-- SET AUTCOMMIT = 0|1
-- 值为0:关闭自动提交
-- 值为1:开启自动提交
SET AUTOCOMMIT = 0
-- 非正常的情况
-- 张三-500
UPDATE BANK SET MONEY = MONEY-500 WHERE ID = 1
#异常
-- 2.出现异常时设置事务回滚
  -- 李四+500
UPDATE BANK SET MONEY = MONEY+500 WHERE ID = 2
#异常
-- 回滚
ROLLBACK
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值