MySQL数据库----事务处理
事物处理
一、 什么是事务
一组sql语句批量执行,要么全部执行成功,要么全部执行失败
二、为什么出现这种技术
为什么要使用事务这个技术呢? 现在的很多软件都是多用户,多程序,多线程的,对同一个表可能同时有很多人在用,为保持数据的一致性,所以提出了事务的概念。这样很抽象,举个例子:
A 给B 要划钱,A 的账户-1000元, B 的账户就要+1000元,这两个update 语句必须作为一个整体来执行,不然A 扣钱了,B 没有加钱这种情况很难处理。
三、事物的特性
80年代中国人结婚四大件:手表、自行车、缝纫机、收音机(三转一响)。要把事务娶回家同样需要四大件,所以事务很刻薄(ACID),四大件清单:原子性(Atom)、一致性(Consistent)、隔离性(Isolate)、持久性(Durable)。ACID就是数据库事务正确执行的四个特性的缩写。
- 原子性:要么不谈,要谈就要结婚!
对于其数据修改,要么全都执行,要么全都不执行。
- 一致性:恋爱时,什么方式爱我;结婚后还得什么方式爱我;
数据库原来有什么样的约束,事务执行之后还需要存在这样的约束,所有规则都必须应用于事务的修改,以保持所有数据的完整性。
- 隔离性:闹完洞房后,是俩人的私事。
一个事务不能知道另外一个事务的执行情况(中间状态)
- 持久性:一旦领了结婚证,无法后悔。
即使出现致命的系统故障也将一直保持。不要告诉我系统说commit成功了,回头电话告诉我,服务器机房断电了,我的事务涉及到的数据修改可能没有进入数据库。
另外需要注意:
- 在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。
- 事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。
- 事务用来管理 insert,update,delete 语句
四、事务控制语句:
BEGIN 或 START TRANSACTION;显式地开启一个事务;
COMMIT;也可以使用COMMIT WORK,不过二者是等价的。COMMIT会提交事务,并使已对数据库进行的所有修改称为永久性的;
ROLLBACK;有可以使用ROLLBACK WORK,不过二者是等价的。回滚会结束用户的事务,并撤销正在进行的所有未提交的修改;
- SAVEPOINT : 保存点,可以把一个事物分割成几部分.在执行ROLLBACK 时 可以指定在什么位置上进行回滚操作.
注意: SET AUTOCOMMIT=0 ;禁止自动提交 和 SET AUTOCOMMIT=1 开启自动提交.
五、例子: 鲁班转账给后羿
1.创建表
12345create
table
account(
id
int
(50)
not
null
auto_increment
primary
key
,
name
VARCHAR
(50)
not
null
,
money
DOUBLE
(5,2)
not
NULL
);
2.插入数据
1insert
into
account (
name
,money)
values
(
'鲁班'
,250),(
'后羿'
,5000);
3.执行转账
12345678910start
transaction
;
-- 开启事物
-- 执行sql语句操作
update
account
set
money = money - 500
where
id =
'1'
;
update
account
set
money = money+500
where
id =
'2'
;
commit
;
-- 手动提交事物
rollback
;
-- 回滚事物
-- 查看结果
select
*
from
account;
4.保存点使用
123456789START
TRANSACTION
;
insert
into
account (
name
,money)
values
(
'李元芳'
,1000);
SAVEPOINT s1;
-- 设置保存点
insert
into
account (
name
,money)
values
(
'张桂枝'
,1500);
ROLLBACK
to
s1;
-- 事物回滚到保存点<br>COMMIT; --提交事物
最新文章
- Bungee Jumping[HDU1155]
- 如何启动redis
- bootstrap-16
- POJ3469 Dual Core CPU(最小割)
- hdu 4002 欧拉函数 2011大连赛区网络赛B
- VMware系统运维(四)SQL Server 2008 R2 新建数据库与ODBC数据
- zh-cn,zh-tw,en-us,en-gb等网页语言代码一览表
- haproxy path_end不能忽略
- hibernate set的3属性
- Caliburn.Micro - 框架搭建
- DIV+CSS 规范命名集合
- 匿名委托与Lambda表达式
- 数据处理不等式:Data Processing Inequality
- Anaconda+用conda创建python虚拟环境
- mysql分表经验总结
- MariaDB安装及基本配置
- ES6 Generator 异步编程解决方案&;&;&;promise
- flask框架的教程--程序的基本结构[二]
- select for update引发死锁分析
- 微信小程序:一起玩连线,一个算法来搞定