-
Notifications
You must be signed in to change notification settings - Fork 14
Open
Labels
Description
本篇博客(第四篇)重点:
掌握 MySQL 的事务处理方法(事务控制语言(TCL))
了解 MySQL 事务处理的应用场景
理解 MySQL 的 ACID 原则
MySQL 的事务处理
- 事务就是将一组SQL语句放在同一批次内去执行
- 如果一个SQL语句出错,则该批次内的所有SQL都将被取消执行
注意 MySQL事务处理只支持 InnoDB 和 BDB 数据表类型
MySQL的事务实现方法
SET AUTOCOMMIT
- 使用SET语句来改变自动提交模式:
SET AUTOCOMMIT = 0;关闭自动提交模式SET AUTOCOMMIT = 1;开启(还原)自动提交模式
注意:MySQL 中默认是自动提交,使用事务时应先关闭自动提交
START TRANSACTION
- 开始一个事务,标记事务的起始点
COMMIT
- 提交一个事务给数据库
ROLLBACK
- 事务回滚,数据回到本次事务的初始状态
MySQL事务处理步骤
MySQL 事务处理的应用场景
场景:
顾客A在线购买一款商品,价格为500.00元,采用网上银行转账的方式支付
假如顾客A银行卡的余额为2000.00元,且向卖家B支付购买商品费用500.00元,起始卖家B的账号金额10000.00元
创建数据库 shop 和创建表 account 并插入2条数据:
/*创建 shop 数据库*/
CREATE DATABASE IF NOT EXISTS `shop`;
/* 创建 账户表 */
CREATE TABLE IF NOT EXISTS `account` (
`id` int(11) not null auto_increment,
`name` varchar(32) not null,
`cash` decimal(9,2) not null,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
INSERT INTO `account` (`name`,`cash`) VALUES ('A',2000.00);
INSERT INTO `account` (`name`,`cash`) VALUES ('B',10000.00);+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(32) | NO | | NULL | |
| cash | decimal(9,2) | NO | | NULL | |
+-------+--------------+------+-----+---------+----------------+
INSERT INTO `account` (`name`,`cash`) VALUES ('A',2000.00);
INSERT INTO `account` (`name`,`cash`) VALUES ('B',10000.00); 网上支付
设置场景:
A账户成功减少500元,B账户应该增加500元,但一些错误导致未增加成功,这时则需返回A账户的500元,达到账户总额的平衡
需求说明:
- 案例背景:银行的转账过程中,发生意外是在所难免。为了避免意外而造成不必要的损失,使用事务处理的方式进行处理
- A账户现有余额1000元,向B账户(账户金额为200元)进行转账500元。可能由于某原因:
- A账户在扣除转账金额时发生错误,使用事务回滚来返回到初始状态
- A账户成功扣除转账金额后,B账户添加转账金额发生错误,使用事务回滚到初始状态
- 提示:先建数据表account,字段包括姓名(username)、余额(money),再分别利用事务处理以上两种情况
/* 事务处理*/
select * from account;
set autocommit= 0;
START TRANSACTION;
update account set cash = cash - 500 where name = 'A';
select * from account;
ROLLBACK;
set autocommit = 1;
select * from account;事务的 ACID 原则
- 原子性(Atomic)
- 一致性(Consist)
- 隔离性(Isolated)
- 持久性(Durable)