mysql 事物安全_MySQL学习之事务安全

事务安全

事务概念

事务(transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit),事务通常由高级数据操纵语言或编程语言

书写的用户程序的执行所引起。事务有事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。

事务基本原理

基本原理:MySQL允许将事务统一进行管理(存储引擎INNODB),将用户所做的操作,暂时保存起来,不直接放到数据表中(更新)

,等到用户确认结果之后再进行操作。

a1f553d11c7f6b70c8915bbf021675aa.png

事务在MySQL中通常是自动提交,但是也可以使用手动提交。

自动事务

自动事务:autocommit,当客户端发送一条SQL指令(写操作,增删改)给服务器的时候,服务器在执行之后,不用等待用户反馈

结果,会自动将结果同步到数据表中。

证明:利用两个客户端,一个客户端执行SQL指令,另外一个客户端进行查看。

cc736eecb921effb8652c03f53d299b5.png

自动事务:系统做了额外的步骤来帮助用户操作,系统是通过变量来控制的。autocommit。

show variables like 'autocommit%';

af4033a67c74f46f5f376342d2ac5846.png

关闭自动事务,关闭之后系统就不再帮助用户提交结果了。

8cc4525f0a8a07adf70b35b50c7ea4de.png

d956ded49ffa375055050e63ffdeb730.png

一旦自动呢事务关闭,那么需要用户提供是否同步的命令。

1.commit:提交(同步到数据库 ,事务也会被清空)。

2.rollback:回滚(清空之前的操作,不要了)。

61b44fc578584efe0414ffc5b7a800f3.png

事务没有提交的对比查看,在执行事务端的客户端中,系统在进行数据查看的时候会利用事务日志中保存的

结果对数据进行加工。

399160015e9e91cdcd9a06cfa36494f6.png

通常,我们不会关闭自动事务,这样操作太麻烦,因此只会在需要使用事务处理的时候,才进行操作(手动事务)。

手动事务

手动事务:不管是开始还是过程还是结束都需要用户(程序员),手动的发送事务操作指令来实现数据同步。

手动事务对应的命令:

1.start transaction;     // 开始事务,从这条语句开始,后面的所有语句都不会直接写入到数据库表中,而是保存在(事务日志中)

2.事务处理:多个写指令构成。

3.事务提交:commit/rollback,到这个时候所有的事物才算结束。要么将之前的所有操作提交,要么就都不提交。

开启事务

fdbef64f6775619f65c57ae18031ceaf.png

执行事务

将多个连续的但是是一个整体的SQL指令,逐一执行。

c95b1799d513c0f15b6a9ad9f5aa89cc.png

提交事务

确认提交:commit,数据写到数据表中(清空)。

回滚操作:rollback,所有数据无效并清空。

回滚点

当事务处理很多步的时候,如果只有提交和回滚两个操作的话,那么可能是很麻烦的,比如你已经成功了大半,但是最后有个操作错误了,

那么直接回滚效率很低的,基于这种情况,可以使用回滚点,可以回滚到指定的事务处理的位置。可以在某个点(成功),设置一个记号,

然后如果后面有失败,那么可以回到这个记号位置。

增加回滚点:savepoint 回滚点名字;   // 字母数字和下划线构成。

125b81587f7da1b390ad5c83b906fd31.png

回到回滚点:rollback to 回滚点名字;   // 那么记号(回滚点)之后的所有操作没有了。

注意:在一个事务处理中,如果有很多个步骤,那么可以设置多个回滚点,但是如果回到了前面的回滚点,后面的回滚点就失效。

c77c3dd4152c8c69dafd6a589fb29e75.png

事务特点

事务应该具有4个属性:原子性,一致性,隔离性,持久性。这四个属性通常称为ACID特性。

原子性(atomicity)

一个事务是一个不可分割的工作单位,事务中包括的诸多操作要么都做,要么都不做。

事务从start transaction起到提交事务(commit或者是rollback),要么所有的操作都成功,要么所有的操作都失败。

一致性(consistency)

事务必须是使数据库从一个一致状态变化到另一个一致状态,一致性与原子性是密切相关,数据表中的数据修改,

要么是所有操作一次性修改,要么就根本不变。

隔离性(isolation)

一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的

各个事务之间不能相互干扰。

如果一个客户端在使用事务操作一个数据(可能是一行/整个表)的时候,另一个客户端不能对该数据进行操作。

0631a6f12415c3a7be55bbe516b69f5e.png

什么时候是行被隔离?什么时候是整个表被隔离?

说明:如果条件中使用了索引(主键),那么系统是根据主键直接找到某条记录的,这个时候与其他记录无关,那么只隔离一条记录;反之,如果说系统是通过全表检索(每一条记录都去检查,没有索引),被检索的所有数据都会被锁定(整个表)。

持久性(durability)

持久性也称永久性(permanence),指的是一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值