mysql数据库入门

第6章 事务与存储过程

学习目标
• 了解事务的概念,会开启、提交和回滚事务
• 掌握事务的4种隔离级别
• 学会创建存储过程
• 掌握调用、查看、修改和删除存储过程

主要语法

开始事务

START TRANSACTION; 

提交事务

COMMIT; 

回滚事务

ROLLBACK; 

事物的四个特性

原子性
事务中每一条语句都是事务的一个不可分割的小的单元,操作语句与事务就如同人们的手和身体一样,只有所有语句都执行成功,事务才算成功。
一致性
一致性是指事务将数据库从一种状态转变为下一种一致的状态。如果其中一个动作失败了,则系统自动撤销事务。
隔离性
隔离性还可以被称为并发控制,可串行化,锁等,当多个用户并发访问数据库,数据为一个用户开启事务时不被其他事务所干扰,多个任务相互隔离。
持久性
事务一旦提交,所做的修改会永久保存到数据库中。

详细讲解

插入相应的数据,SQL语句具体如下:
创建数据库

CREATE DATABASE chapter06;

在这里插入图片描述

使用数据库

USE chapter06;

代码结果

创建表
包含关系只用小括号(新手一定要注意)

CREATE TABLE account( 
id INT primary key auto_increment,
 name VARCHAR(40), 
 money FLOAT ); 

代码结果
复习一下插入数据,有三种方法
《1》写出关键字后输入值

insert into account(name,money) value('a',1000);

在这里插入图片描述

《2》直接输入所有关键字的的值,不用写关键字

insert into account value(null,'b',1000);

在这里插入图片描述

《3》用set设置关键字的值(可以只插入其中的几个值)

insert into account set name='c',money=1000;

在这里插入图片描述
用select查询,语法格式如下:

select * from account;

在这里插入图片描述
做完准备工作可以开始事务

事务的提交

start transaction;
update account set money=money-100 where name ='a';
update account set money=money+100 where name='b';
commit;

在这里插入图片描述
在这里插入图片描述
第一张图是复制的,所以写的时候不要这样写,容易出错,不便于维护
建议大家按照第二张图的方式写
细心地小伙伴可能会发现我在commit之前使用了查询,但结果是进行了两次的结果,怎么没提交也行?

事务的回滚

下面我们再看rollback;
我们先把数据初始为原来每人一千

update account set money =1000;
select * from account;

在这里插入图片描述

start transaction;
update account set money=money-100 where name ='a';
update account set money=money+100 where name='b';
rollback;

在这里插入图片描述

大家看一下第一次查询与第二次查询是不是不一样,相比大家已经猜到了rollback的作用了,对!就是将事物回滚,让语句不执行。

前面讲了事物的四种特性,下面重点讲一下事物的隔离级别

  • READ UNICOMMITTED
    READ UNICOMMITTED(读未提交)是隔离级别最低的一个级别,这种级别下容易读取到领一个事务中未提交的数据,这是非常危险的(也被称为“脏读”),这是相当危险的,例如,当你卖一件东西时买家没有提交只是把要付的钱给输了上去,但却没有提交,你却查到了钱,把东西给他,之后他放弃来支付,也就是(回滚)。这样你就亏了。、而这也就是**脏读(Dirty Read) **现象

  • READ COMMITTED
    READ COMMITTED(读提交)
    大多数的数据管理系统的默认隔离级别都是READ COMMITTED的,读提交该级别下的事物只能读取其他事物已经提交的内容可以避免脏读,但不能避免重复读和换读的情况。

脏读读取就是指读取了另外一个事务未被提交的数据

例如,A账户要给B账户转100元购买商品,如果a账户开启了一个事务,执行了下面的update语句,做了转账的工作。a未提交,但b却能够查到。之后就造成了b以为a提交了,但a其实未提交,之后a可以进行回滚,a就会亏损。
在这里插入图片描述
在这里插入图片描述

  • REPEATABLE READ
    MySQL 默认的隔离级别,在这里插入图片描述
    REPEATABLE READ(可重复读)是MYSQL默认的事物隔离级别,它可以避免脏读不可重复读的问题,确保同一事物的多个实例。在并发读取数据时会看到同样的数据行。理论上,该级别会出现幻读。但可以避免不可重复读
不可重复读

所谓的不可重复读是指事物中两次查询的结果不一致,原因是在查询的过程中其他事物做了更新的操作。
在这里插入图片描述
实际上,这种操作是没错的,但是如果在银行统计报表时,这种情况是不符合需求的,因为我们并不希望在一个事物中看到的查询结果不一致,这就是不可重复读

  • SERIALIZABLE
    可串行化是事物的最高隔离级别,它会强制对事物进行排序,使之不会发生冲突,从而解决脏读、幻读、重复读的问题。实际上就是在每个读的数据行上加锁,这个级别可能导致大量的超时现象和锁竞争,实际应用中很少使用。
幻读

幻读又被称为虚读,是指在一个事物内两次查询中数据条数不一致,幻读和不可重复读有些类似。同样是在两次查询中过程中不同的是换毒,由于其它事务做了插入记录的操作,导致记录数有所增加。
比如,银行在做统计报表时,统计account表中的所有用户的总额时,此时共有三个用户,共金额有3000,这时新增了一个账户,并且存入了1000元,这时银行在统计时会发现账户的总金额变为4000,造成了幻读的情况。
在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值