MySQL学习之事务安全
事务安全
事务概念
事务(transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit),事务通常由高级数据操纵语言或编程语言
书写的用户程序的执行所引起。事务有事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。
事务基本原理
基本原理:MySQL允许将事务统一进行管理(存储引擎INNODB),将用户所做的操作,暂时保存起来,不直接放到数据表中(更新)
,等到用户确认结果之后再进行操作。

事务在MySQL中通常是自动提交,但是也可以使用手动提交。
自动事务
自动事务:autocommit,当客户端发送一条SQL指令(写操作,增删改)给服务器的时候,服务器在执行之后,不用等待用户反馈
结果,会自动将结果同步到数据表中。
证明:利用两个客户端,一个客户端执行SQL指令,另外一个客户端进行查看。

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

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


一旦自动呢事务关闭,那么需要用户提供是否同步的命令。
1.commit:提交(同步到数据库 ,事务也会被清空)。
2.rollback:回滚(清空之前的操作,不要了)。

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

通常,我们不会关闭自动事务,这样操作太麻烦,因此只会在需要使用事务处理的时候,才进行操作(手动事务)。
手动事务
手动事务:不管是开始还是过程还是结束都需要用户(程序员),手动的发送事务操作指令来实现数据同步。
手动事务对应的命令:
1.start transaction; // 开始事务,从这条语句开始,后面的所有语句都不会直接写入到数据库表中,而是保存在(事务日志中)
2.事务处理:多个写指令构成。
3.事务提交:commit/rollback,到这个时候所有的事物才算结束。要么将之前的所有操作提交,要么就都不提交。
开启事务

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

提交事务
确认提交:commit,数据写到数据表中(清空)。
回滚操作:rollback,所有数据无效并清空。
回滚点
当事务处理很多步的时候,如果只有提交和回滚两个操作的话,那么可能是很麻烦的,比如你已经成功了大半,但是最后有个操作错误了,
那么直接回滚效率很低的,基于这种情况,可以使用回滚点,可以回滚到指定的事务处理的位置。可以在某个点(成功),设置一个记号,
然后如果后面有失败,那么可以回到这个记号位置。
增加回滚点:savepoint 回滚点名字; // 字母数字和下划线构成。

回到回滚点:rollback to 回滚点名字; // 那么记号(回滚点)之后的所有操作没有了。
注意:在一个事务处理中,如果有很多个步骤,那么可以设置多个回滚点,但是如果回到了前面的回滚点,后面的回滚点就失效。

事务特点
事务应该具有4个属性:原子性,一致性,隔离性,持久性。这四个属性通常称为ACID特性。
原子性(atomicity)
一个事务是一个不可分割的工作单位,事务中包括的诸多操作要么都做,要么都不做。
事务从start transaction起到提交事务(commit或者是rollback),要么所有的操作都成功,要么所有的操作都失败。
一致性(consistency)
事务必须是使数据库从一个一致状态变化到另一个一致状态,一致性与原子性是密切相关,数据表中的数据修改,
要么是所有操作一次性修改,要么就根本不变。
隔离性(isolation)
一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的
各个事务之间不能相互干扰。
如果一个客户端在使用事务操作一个数据(可能是一行/整个表)的时候,另一个客户端不能对该数据进行操作。

什么时候是行被隔离?什么时候是整个表被隔离?
说明:如果条件中使用了索引(主键),那么系统是根据主键直接找到某条记录的,这个时候与其他记录无关,那么只隔离一条记录;反之,如果说系统是通过全表检索(每一条记录都去检查,没有索引),被检索的所有数据都会被锁定(整个表)。
持久性(durability)
持久性也称永久性(permanence),指的是一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
MySQL学习之事务安全的更多相关文章
- MySQL学习笔记-事务相关话题
事务机制 事务(Transaction)是数据库区别于文件系统的重要特性之一.事务会把数据库从一种一致状态转换为另一个种一致状态.在数据库提交工作时,可以确保其要么所有修改都已经保存了,要么所有修改都 ...
- MySQL学习——管理事务
MySQL学习——管理事务 摘要:本文主要学习了使用DCL语句管理事务的操作. 了解事务 什么是事务 事务是一组逻辑处理单位,可以是执行一条SQL语句,也可以是执行几个SQL语句. 事务用来保证数据由 ...
- Mysql学习之事务的隔离性
今天咱们说说事务,相信大家都知道事务的 ACID (Atomicity.Consistency.Isolation.Durability,即原子性.一致性.隔离性.持久性). 原子性:表示一个事务不可 ...
- mysql学习--1.事务
转载自孤傲苍狼的博客:http://www.cnblogs.com/xdp-gacl/p/3984001.html 四.事务的四大特性(ACID) 4.1.原子性(Atomicity) 原子性是指事务 ...
- MySQL学习笔记-锁相关话题
在事务相关话题中,已经提到事务隔离性依靠锁机制实现的.在本篇中围绕着InnoDB与MyISAM锁机制的不同展开,进而描述锁的实现方式,多种锁的概念,以及死锁产生的原因. Mysql常用存储引擎的锁 ...
- MySQL学习笔记-数据库文件
数据库文件 MySQL主要文件类型有如下几种 参数文件:my.cnf--MySQL实例启动的时候在哪里可以找到数据库文件,并且指定某些初始化参数,这些参数定义了某种内存结构的大小等设置,还介绍了参数类 ...
- MySQL学习笔记-数据库内存
数据库内存 InnoDB存储引擎内存由以下几个部分组成:缓冲池(buffer pool).重做日志缓冲池(redo log buffer)以及额外的内存池(additional memory pool ...
- MySQL学习笔记-数据库后台线程
数据库后台线程 默认情况下讲述的InnoDB存储引擎,以后不再重复声明.后台线程有7个--4个IO thread,1个master thread,1个锁监控线程,1个错误监控线程.IO thread的 ...
- MySQL学习笔记-cache 与 buffer
Cache和Buffer是两个不同的概念,简单的说,Cache是加速"读",而 buffer是缓冲"写",前者解决读的问题,保存从磁盘上读出的数据,后者是解决写 ...
随机推荐
- 003客户端负载均衡Ribbon & 短路器Hystrix
1.POM配置 和普通Spring Boot工程相比,仅仅添加了Eureka.Ribbon.Hystrix依赖和Spring Cloud依赖管理 <dependencies> <!- ...
- 08_Redis持久化——RDB方式
[简述] 持久化:Redis能将数据从内存中以某种形式同步到硬盘中,使得重启后可以根据硬盘中的记录恢复数据,这一过程就是持久化. Redis支持两种方式的持久化,简单来说如下: RDB方式:会根据指定 ...
- 考勤机sql语句
考勤机sql语句 SELECT checkinout.id as 序号 ,checkinout.pin as 打卡编号,userinfo.name 姓名, checkinout.checktime 签 ...
- 用navicat工具创建MySQL存储过程
使用Navicat for MySQL工具创建存储过程步骤: 1. 新建函数(选择函数标签 -> 点击新建函数): 2.输入函数的参数个数.参数名.参数类型等: 3.编写存储过程: 代码如下: ...
- c# 值类型与引用类型(转)
本文意在巩固基础知识,并不是对其进行深入剖析,还望理解.本文是对此项知识的整理文,有些内容来源于网络,其他为博主原创,所以难免会有一些小得瑕疵,敬请谅解.所有示例均是博主测试过的,如有转载请标明出处, ...
- C#启动服务
启动服务的方法有很多种,简单的cmd下dos命名,手动启动,还有C#代码启动. 我们要实现的功能: 判断是否安装 是否启动 启动服务 关闭服务 我封装了有关服务的代码,如下: using System ...
- pt-kill
pt-kill作用主要是用来杀掉MySQL的链接,在查杀进程的时候,它从show processlist 中获取满足条件的连接然后进行kill,也可以从从包含show processlist的文件中读 ...
- 关于 Web 安全,99% 的网站都忽略了这些
Web安全是一个如何强调都不为过的事情,我们发现国内的众多网站都没有实现全站https,对于其他安全策略的实践更是很少,本文的目的并非讨论安全和攻击的细节,而是从策略的角度引发对安全的思考和重视. 1 ...
- C++中类与结构体的区别
相信有一点专业知识的人都知道,C语言是一种结构化语言.它层次清晰,便于按模块化方式组织程序,易于调试和维护.在很大程度上,标准C++是标准C的超集.实际上,所有C程序也是C++程序,然而,两者之间有少 ...
- 获取DataTable某一列的所有值
/// <summary> /// 获取某一列的所有值 /// </summary> /// <typeparam name="T">列数据类型 ...