MySQL:事务

事务:什么是事物;怎样创建事务;事务相关语句用法;事物的特性 。

一:什么是事务
事务是由一组DML语句组成,完成一个相对完整的功能。这一组DML语句要么全部执行,要么全部放弃执行
例如,张三给李四转账,这对于数据库而言就是一个事务。该事务由两部分单独的操作组成,张三账户减少钱,李四账户增加钱,作为数据库,必须保证组成事务的两部分操作必须全部完成,才能维护数据的一致性。当因为某种原因(比如输入完张三账户减少钱的代码,后关掉交互式命令行,导致李四账户增加钱代码没有输入),导致其中的一个操作失败,那么其他的操作也会被撤销。

二:数据库开启事务命令
start transaction 或者 begin 开启事务
commit 提交事务,提交未存储的事务
rollback 回滚事务,即撤销指定的sql语句(回退insert delete update语句)
savepoint 保留点 ,事务处理中设置的临时占位符 你可以对它发布回退。

例如:zs 给 lisi 转账 100块钱这件事。

1:创建事务
Navicat软件 表格操作创建及输入事务创建语句:
账单表account:
在这里插入图片描述
输入创建事务语句:

begin;  
update account set money=money-100 where name ='zs';
update account set money = money+100 where name = 'ls';
commit;

输入查看语句:

select * from account;

在这里插入图片描述
zs的钱减少100,ls的钱增加100.

在交互式命令行中 表格操作创建及输入事务创建语句:

打开交互式命令行
输入:begin;

输入:update account set money=money-100 where name =‘zs’;
如图:
在这里插入图片描述
可以查看账单情况
继续输入

select * from account;

在这里插入图片描述
发现zs实时账单已经减少100变为900,ls账单没有变

如果此时关掉交互式窗口,中断事务
重新打开交互式命令行查看:

select * from account;

在这里插入图片描述
可以看到zs的钱从900变回1000即没有减少,ls的钱没有增加,事务回滚到begin之前体现事务 这一组DML语句要么全部执行,要么全部放弃执行,体现事务的一致性

2:回滚语句
rollback
例如:向account 表格中添加两条数据(id primary key auto_increment),然后再回滚到原始值。

insert into account(name,money) values('ww',2000);
insert into account(name,money) values('zq',2100);


start transaction;
insert into account(name,money) values('td',2200);
insert into account(name,money) values('ch',2300);

select * from account;
rollback;
select * from account;

第一次查看的结果
在这里插入图片描述
rollback 后查看的结果
在这里插入图片描述
默认回滚到开启事务位置

设置回滚点
savepoint

begin;
insert into account(name,money) values('张飞',3000);
savepoint s1;
insert into account(name,money) values('关羽',3100);
savepoint s2;
insert into account(name,money) values('刘备',3200);
savepoint s3;
insert into account(name,money) values('赵云',3300);

select * from account;
rollback to s2;
select * from account;

第一次查看的结果:
在这里插入图片描述
rollback to s2后查看的结果:
在这里插入图片描述
回到数s2的位置

三:事物的特性
事务具有四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持续性(Durability)。这四个特性也简称ACID性

(1)原子性:是指事务是一个不可再分割的工作单位,事务中的操作要么都发生,要么都不发生。就如原子是自然界最小颗粒,具有不可再分的特征一样。

(2)一致性:事务执行的结果,必须使数据库从一个一致性状态,变到另一个一致性状态。当数据库中只包含事务成功提交的结果时,数据库处于一致性状态。一致性是通过原子性来保证的。(双方账户的总和不能少也不能多)

(3)隔离性:各个事务的执行互不干扰,任意一个事务的内部操作对其他并发的事务,都是隔离的。(简单的理解 就是你做你的,我做我的!)

(4)持续性:持续性也称为持久性,指事务一旦提交,对数据所做的任何改变,都要记录到永久存储器中,通常是保存进物理数据库。(转账记录成功了,不能过一会变成了出错了)

隔离性:
打开两个互动式命令行1,2

在开启互动式命令行1中:开启事务后进行操作,但是没有提交事务。
在这里插入图片描述

在互动式命令行2总:在互动式1操作的时候,查看account表格中的数据,发现没有改变,这就是隔离性
在这里插入图片描述

四、总结:
1.事务的概念
2.事务的特性ACID 原子性、一致性、隔离性、持久性。
3.语法
(1)开启事务 begin、start transaction
(2)提交事务 commit
(3)回滚事务 rollback
(4)设置保留点 savepoint 名称, rollback to 保留点名称。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值