MySQL学习使用[9天系列 学习笔记 Day09]

系列文章目录

MySQL学习使用[9天系列 学习笔记]
Day01了解和创建数据库
(附上链接Day01:
https://blog.csdn.net/besthtml/article/details/128055581?
Day02创建、查看和删除表
https://blog.csdn.net/besthtml/article/details/128066352?
Day03更新数据和简单查询
https://blog.csdn.net/besthtml/article/details/128069269?
Day04模糊查询、结果排序和限制输出行
https://blog.csdn.net/besthtml/article/details/128085013?
Day05统计函数和其他函数的使用
https://blog.csdn.net/besthtml/article/details/128086178?
Day06分组统计和限制分组输出
https://blog.csdn.net/besthtml/article/details/128092918
Day07嵌套查询和连接查询
https://blog.csdn.net/besthtml/article/details/128099111
Day08视图、索引、备份和恢复
https://blog.csdn.net/besthtml/article/details/128108602?
Day09事务
https://blog.csdn.net/besthtml/article/details/128115542?


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


事务


提示:以下是本篇文章正文内容,下面案例可供参考

一、事务

事务(一个完整的业务逻辑)【最小的工作单位,批量的DML要求同时成功or失败】只有DML语句才有事务。事务分为两种提交事务,回滚事务。

提交事务:清空事务性活动的日志文件,将数据全部彻底持久化到数据表中。提交事务标志着事务的结束,并且是一种全部成功的结束。
commit语句

回滚事务:将之前所有的DML操作全部撤销,并且清空事务性的活动的日志文件。回滚事务标志着事物的结束,并且是一种全部失败的结束
rollback语句(只能回滚上一次的起点)
例 向book表插入一条数据后使用回滚在查看是否含有此数据。
start transaction(开启事务,mysql默认commit,在这里自动改成手动)

start transaction;
insert into book values(‘006’,‘龙族Ⅰ’,‘江南’,‘人民文学出版社’,‘2010-10-06’,6,19.9);
rollback.

二、事务特性

简单的记 ACID
A:原子性:事务是最小的工作单位,不可再分。
C:一致性:在同一个事务中,所有操作必须同时成功,或者同时失败,保证数据的一致性。
I:隔离性:A事务和B事务之间具有一定的隔离性
D:持久性:事务最终一个结束的保障事务提交,就相当于将没有保存在硬盘的数据保存在硬盘上。

在这里我们重点介绍一下事务的隔离性。

三、事物的隔离性

事务的隔离性分为4个级别。越往下级别越高。
读未提交:事务A可以读取到事务B未提交的数据。(可能回出现脏读现象)
读已提交:事务A只能读取到事务B提交之后的数据(解决脏读问题,但会出现不可重复读取数据)
可重复读:事务A开启之后,不管是多久在每一次事务A读取的数据都是一致的。即使事务B将数据已经修改并且提交,事务A读取到的数据还是没有发生改变。(解决了不可重复的问题,但可能会出现读到的数据是幻想,不够真实)
序列化/串行化:解决所有问题,但效率低。

读未提交

因为mysql默认可重复读,所以我们需要设置为读未提交
set global transaction isolation level read uncommitted;
在重新进入mysql就行。
查看隔离级别
8.0版本下 select @@tx_isolation;
8.0版本上 select @@transaction_isolation;
首先打开俩个dos窗口我们分为左右
例左窗口插入数据,右窗口来读取数据

左窗口右窗口
start transaction;
start transaction;
insert into book values(‘006’,‘龙族Ⅰ’,‘江南’,‘人民文学出版社’,‘2010-10-06’,6,19.9);
select * from book;
rollback;

在这里插入图片描述

读已提交

和读未提交一样设置为读已提交
set global transaction isolation level read committed;

左窗口右窗口
start transaction;
start transaction;
insert into book values(‘006’,‘龙族Ⅰ’,‘江南’,‘人民文学出版社’,‘2010-10-06’,6,19.9);
select * from book;
commit;
select * from book;

只有左边窗口commit之后右边才能查到更新信息。

可重复读

和读未提交一样设置为可重复读
set global transaction isolation level repeatable read;

左窗口右窗口
start transaction;
start transaction;
select * from book;
insert into book values(‘006’,‘龙族Ⅰ’,‘江南’,‘人民文学出版社’,‘2010-10-06’,6,19.9);
commit;
select * from book;

右边查到的数据还是刚开始的数据。

序列化

和读未提交一样设置为序列化
set global transaction isolation level serializable;

左窗口右窗口
start transaction;
start transaction;
insert into book values(‘006’,‘龙族Ⅰ’,‘江南’,‘人民文学出版社’,‘2010-10-06’,6,19.9);
select * from book;
commit;

当右边查询时,左边不输入commit,右边就一直卡着光标,只有左边输入commit时,右边回自动弹出查询信息。

例 为编号为001的读者办理编号为101的书籍的借阅手续,要求在办理借阅的同时将图书信息表中此书的当前数量减1,在读者信息表中为该读者的借阅数量加1。

start transaction; 
update book set bcount=bcount-1 where bid='101';
update reader set lendnum=lendnum+1 where rid='001';
commit;

例 为编号为001的读者办理缴纳罚金和归还图书的手续,要求一次完成以下功能:
(1)在罚款记录表中增加一条记录,记录读者001因延期归还编号为101的图书而缴纳滞纳金4.6元。
(2)在图书借阅表中修改相应借阅记录的归还日期为当前日期。
(3)将读者信息表中相应的已借阅数量减1。
(4)将图书信息表中相应的现存数量加1。

start transaction;
insert into penalty(ridd,bidd,pdate,ptype,amount) values ('001','101',now(),1,4.6);
update reader set lendnum=lendnum-1 where rid='001';
update book set bcount=bcount+1 where bid='101';
commit;

总结

提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,本文仅仅简单介绍了事务的使用,MySQL笔记到今天也就结束了,如果哪里有错误,请指正,同时如果我学的新知识等我会继续编辑文章信息的。谢谢大家的观看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值