Linux运维数据库篇 MySQL的事务概念 |事务的控制语句

前言

MySQL中事务是一种机制 一个操作序列 包含了一组数据库操作命令 并且把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么都执行,要么都不执行。通过事务的整体性以保证数据的一致性。

一、事务的四个特点(ACID)

1 原子性

1事务是一个完整的操作,事务的各元素是不可分的
2 事务中的所有元素必须作为一个整体提交或回滚
3 如果事务中的任何元素失败,则整个事务将失败

2 一致性

1当事务完成时,数据必须处于一致状态
2在事务开始之前,数据库中存储的数据处于一致状态
3在正在进行的事务中,数据可能处于不一致的状态
4当事务成功完成时,数据必须再次回到已知的一致状态。
**

3 隔离性

1对数据进行修改的所有并发事务是彼此隔离的,表明事务必须是独立的,它不应该以任何方式依赖于或影响其他事务
2 修改数据的事务可在另一个使用相同数据的事务开始之前访问这些数据,或者在另一个使用相同数据的事务结束之后访问这些数据

4 持久性

1 不管关系是否发生故障,事务处理的结果都是永久的
2 一旦事务被提交,事务的效果会被永久地保留在数据库中

二、事务之间的影响关系

1.脏读

一个事务读取了另一个事务未提交的数据,而这个数据是有可能回滚的。

2.不可重复读

一个事务内两个相同的查询却返回了不同了不同数据。这是由于查询时系统中其他事务修改的提交而引起的

3 幻读

一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。
同时,另一个事务也修改这个表中的数据,这种修改是向表中插入一行新数据,因此前一个事务的用户会发现表中存在未修改的数据行 如同幻觉一般。

4 丢失更新

两个事务同时读取同一个记录 a先修改数据 b后修改数据(a修改数据但b未知),b的i修改就会覆盖a修改。

三 四大隔离

RU

读取尚未提交的数据,不解决脏读

RC

读取已经提交的数据,可以解决脏读

RR

重新读取,可以解决脏读和不可重复读 MySQL默认的

serialization

串行化,可以解决脏读不可重复读和虚度 相当于锁表

四 事务控制语句

在MySQL中一个事务完成后是自动提交的 当sql语句提交时事务便自动提交 也就是说MySQL默认的是自动提交功能,当这个功能关闭后 就只可以手动提交,在此功能下 做的修改是在内存中修改的,并不会提交到磁盘,MySQL会把修改的数据提交一份副本到内存中,方便进行修改,改完之后执行提交,就可以直接修改实际数据

禁止自动提交

在这里插入图片描述
开启之后就指令不会马上执行 会先缓存
先进入库中 再进入表 开启事务 检查表结构
在这里插入图片描述
添加字段
在这里插入图片描述
查看数据并提交数据
在这里插入图片描述
退出数据库 再进入查看
在这里插入图片描述
此时数据已保存。

数据回滚

可以将数据回滚到之前修改的状态

例如将day列回滚到12的状态
在这里插入图片描述

开启事务
在这里插入图片描述
回滚数据
在这里插入图片描述

查看

在这里插入图片描述

多点回滚

开启第2个事务
在这里插入图片描述
修改表中的数据
在这里插入图片描述
查看修改后的数据
在这里插入图片描述
创建一个回滚点 s1记录 id3 的修改
在这里插入图片描述
再修改一个数据
在这里插入图片描述
建立s2回滚点 来记录id2的修改记录
在这里插入图片描述
再插入一条数据 来模拟到一个新的节点
在这里插入图片描述
回滚到s2
在这里插入图片描述
回滚到s1
在这里插入图片描述

用set设置事务自动提交的开启和关闭

在这里插入图片描述
在这里插入图片描述
1为开启 0为关闭
查看当前的值
在这里插入图片描述

总结

1 事务可以决定一个操作是否直接生效 开启则指令不会马上生效 需要commit来确认操作 不然数据一直写入内存中不会写入硬盘中
2 设置多点回滚可以降低误操作所造成的后果

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值