Open Qingquan-Li opened 7 years ago
本篇博客(第四篇)重点:
掌握 MySQL 的事务处理方法(事务控制语言(TCL)) 了解 MySQL 事务处理的应用场景 理解 MySQL 的 ACID 原则
注意 MySQL事务处理只支持 InnoDB 和 BDB 数据表类型
SET AUTOCOMMIT
SET AUTOCOMMIT = 0;
SET AUTOCOMMIT = 1;
注意:MySQL 中默认是自动提交,使用事务时应先关闭自动提交
START TRANSACTION
COMMIT
ROLLBACK
场景: 顾客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元,达到账户总额的平衡
需求说明:
/* 事务处理*/ 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;
本篇博客(第四篇)重点:
MySQL 的事务处理
注意 MySQL事务处理只支持 InnoDB 和 BDB 数据表类型
MySQL的事务实现方法
SET AUTOCOMMIT
SET AUTOCOMMIT = 0;
关闭自动提交模式SET AUTOCOMMIT = 1;
开启(还原)自动提交模式START TRANSACTION
COMMIT
ROLLBACK
MySQL事务处理步骤
MySQL 事务处理的应用场景
场景: 顾客A在线购买一款商品,价格为500.00元,采用网上银行转账的方式支付 假如顾客A银行卡的余额为2000.00元,且向卖家B支付购买商品费用500.00元,起始卖家B的账号金额10000.00元
创建数据库 shop 和创建表 account 并插入2条数据:
网上支付
设置场景: A账户成功减少500元,B账户应该增加500元,但一些错误导致未增加成功,这时则需返回A账户的500元,达到账户总额的平衡
需求说明:
事务的 ACID 原则