MySQL事务的简介

(一)事务的概念
1、事务是什么
事务的概念:把一组业务相关的SQL操作放在一个事务环境中,保证业务的一致性。事务是
一个最小的不可再分的工作单元;通常一个事务对应一个完整的业务;(如:银行转账业务)
而一个完整的业务需要批量的DML(insert、update、delete)语句共同完成;
事务只和DML语句有关系,或者说只有DML语句才有事务;
以上所描述的批量DML语句共有多少DML语句,这个和业务逻辑有关系,业务逻辑不同
DML语句个数不同。
有?笔业务,转账的业务;明振给明辉进?转账:春节到明振给明振转1000万;该业务涉及到
几个操作:
1)明振的账户应该减去1000万updatexxsetxx=xx-1000wherename=‘明振’
2)明辉的账户应该增加1000万updatexxsetxx=xx+1000wherename=‘明辉’
3)记录业务日志
假设正在执行转账,会出现一些异常,明振减去1000万,明辉没有加上去购物的时候:自己
支付宝账户减少,但是对象账户没有收到。
那么,如何保证业务的一致性呢?数据库提供事务机制保证业务的执行。
务需要批量的DML(insert、update、delete)语句共同完成;
事务只和DML语句有关系,或者说只有DML语句才有事务;
以上所描述的批量DML语句共有多少DML语句,这个和业务逻辑有关系,业务逻辑不同
DML语句个数不同。
有一笔业务,转账的业务;明振给明辉进?转账:春节到明振给明振转1000万;该业务涉及到
几个操作:
1)明振的账户应该减去1000万updatexxsetxx=xx-1000wherename=‘明振’
2)明辉的账户应该增加1000万updatexxsetxx=xx+1000wherename=‘明辉’
3)记录业务日志
假设正在执行转账,会出现一些异常,明振减去1000万,明辉没有加上去购物的时候:自己
支付宝账户减少,但是对象账户没有收到。
那么,如何保证业务的一致性呢?数据库提供事务机制保证业务的执行。
2、事务的特性
事务的四个特性:ACID
(A)原子性:A事务的单元不可以再分,原子是最小的物质单位.最小的操作单位。
(C)一致性:C事务执行前后,数据要一致,A账户减去1000万,B账户就要加1000万;总体账
户金额是一致的。
(I)隔离性:事务之间是互相隔离的,第一个事务的操作和第二个事务是互不影响的。
(D)持久性:事务对数据修改是持久存储的(磁盘文件),不是在内存中临时的存储。并不会被
回滚。
(二)查看事务的提交方式
Mysql的事务提交方式
mysql的常量:在mysql内部预定义的⼀些数据,典型特征是以@@开始的。
Mysql有两种事务提交方式:
1、自动提交(默认)
MySQL在自动提交模式下,每个SQL语句都是一个独立的事务。这意味着,当执行一个用
于更新(修改)表的语句之后,MySQL立刻把更新存储到磁盘中。
2、手动提交(commit)
手动设置set@@autocommit=0,即设定为非自动提交模式,只对当前的mysql命令行窗口
有效,打开一个新的窗口后,默认还是自动提交。使用MySQL客户端执行SQL命令后
必须使用commit命令执行事务,否则所执行的SQL命令无效,如果想撤销事务则使用
rollback命令(在commit之前)。
3、查看提交方式
1)查看MySQL客户端的事务提交方式命令:
select@@autocommit;
2)修改MySQL客户端的事务提交方式为手动提交命令:
set@@autocommit=0;
※注意:MySQL数据库中,当发出一条类似DROPTABLE或CREATETABLE这样的DDL语
句时,会自动进行一个隐式地事务提交。隐式提交将阻止你在此事务范围内回滚任何其他更
改(因为事务已经给提交了无法回滚)。
(三)Mysql事务基本命令
1、开启/关闭事务自动提交命令
1)两种关闭自动提交事务
a)setautocommit=off
b)setsessionautocommit=off
2)两种打开自动提交事务
a)setautocommit=on
b)setsessionautocommit=on
※注意:以上打开或关闭事务只对当前会话有效,即只对当前窗口有效。
2、Mysql事务开始命令
开启的标志:任何⼀条DML语句执⾏,标志事务的开启;insert语句,delete语句,update
语句表示⼀个事务的开启结束的标志:提交(commit)或者回滚(rollback)
begin或starttransaction都是显式开启一个事务;
3、Mysql事务提交命令
commit或commitwork都是等价的;
4、Mysql事务回滚命令
rollback或rollbackwork也是等价的;
二、事务的常用操作
(一)提交
示例1
1mysql>starttransaction;--开启事务
2mysql>insertintotx(id,num)values(6,600);
3QueryOK,1rowaffected(0.04sec)
4mysql>commit;
5QueryOK,0rowsaffected(0.07sec)
示例2
1mysql>begin;--开启事务
2QueryOK,0rowsaffected(0.00sec)
3mysql>deletefromtxwhereid=6;
4QueryOK,1rowaffected(0.06sec)
5mysql>commit;
6QueryOK,0rowsaffected(0.04sec)
(二)回滚
若事务在提交前回滚,将所有的DML语句操作记录全部清空。
示例
1mysql>begin;
2QueryOK,0rowsaffected(0.00sec)
3mysql>deletefromsubjectwheresubjectId=4;
4QueryOK,1rowaffected(0.00sec)
5mysql>select*fromsubject;
6+—————-+—————-+
7|subjectId|SUBJECT|
8+—————-+—————-+
9|1|计算机|
10|2|语文|
11|3|体育|
12+—————-+—————-+
133rowsinset(0.00sec)
14mysql>rollback;
15QueryOK,0rowsaffected(0.00sec)
16mysql>select*fromsubject;
17+—————-+—————-+
18|subjectId|SUBJECT|
19+—————-+—————-+
20|1|计算机|
21|2|语文|
22|3|体育|
23|4|mysql|
24+—————-+—————-+
254rowsinset(0.00sec)
26
27mysql>commit;
28QueryOK,0rowsaffected(0.00sec)
29mysql>
(三)保存点
Mysql可以让我们对事务进行“部分回滚”,就是在事务里调用SAVEPOINT语句来设置一些
命名标记。如果想要回滚到那个标记点位置,需要使用ROLLBACK语句来指定哪个保存点。
※注意:在进⾏数据库操作的时候,如果业务量设计的SQL⽐较多的话,可以使用保存点的
方式进行临时的存储。
示例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值