一.innodb的核心特点------事务

1.什么是事务

在一组数据操作执行步骤,这些步骤被视为一个单元,主要针对dml语句(update、delete、insert)

2.事务ACID特性

Atomic(原子性)
所有语句作为一个单元全部成功执行或全部取消。

Consistent(一致性)
如果数据库在事务开始时处于一致状态,则在执行该。
事务期间将保留一致状态。

Isolated(隔离性)
事务之间不相互影响。

Durable(持久性)
事务成功完成后,所做的所有更改都会准确地记录在
数据库中。所做的更改不会丢失。

3.事务的控制语句

START TRANSACTION(或 BEGIN):显式开始一个新事务
SAVEPOINT:分配事务过程中的一个位置,以供将来引用
COMMIT:永久记录当前事务所做的更改
ROLLBACK:取消当前事务所做的更改
ROLLBACK TO SAVEPOINT:取消在 savepoint 之后执行的更改
RELEASE SAVEPOINT:删除 savepoint 标识符
SET AUTOCOMMIT:为当前连接禁用或启用默认 autocommit 模式

4.事务演示

成功事务
mysql> begin;
mysql> insert into stu(id,name,sex,money) values(,'zhang3','m',), (,'zhang4','m',);
mysql> commit; 事务回滚
mysql> begin;
mysql> update stu set name='zhang3';
mysql> delete from stu;
mysql> rollback;

6.事务自动提交

#查看自动提交
mysql> show variables like 'autocommit';
#临时关闭
mysql> set autocommit=;
#永久关闭
[root@db01 world]# vim /etc/my.cnf
[mysqld]
autocommit=

5.事务隐式提交情况

  a)现在版本在开启事务时,不需要手工begin,只要你输入的是DML语句,就会自动开启事务。
  b)有些情况下事务会被隐式提交

如下:

  在事务运行期间,手工执行begin的时候会自动提交上个事务
  在事务运行期间,加入DDL、DCL操作会自动提交上个事务
  在事务运行期间,执行锁定语句(lock tables、unlock tables)
  load data infile
  select for update
  在autocommit=1的时候

7.事务日志redo基本功能

  a( redo是什么

  redo,顾名思义“重做日志”,是事务日志的一种。

  b( 作用是什么

  在事务ACID过程中,实现的是“D”持久化的作用。

特性:WAL(Write Ahead Log)日志优先写
REDO:记录的是,内存数据页的变化过程

8.redo的工作过程

执行步骤

update t1 set num= where num=;

a)首先将t1表中num=1的行所在数据页加载到内存中buffer page
b)MySQL实例在内存中将num=1的数据页改成num=2
c)num=1变成num=2的变化过程会记录到,redo内存区域,也就是redo buffer page中

提交事务执行步骤

commit;

a)当敲下commit命令的瞬间,MySQL会将redo buffer page写入磁盘区域redo log
b)当写入成功之后,commit返回ok

9.事务日志undo

  a(    undo 是什么?

  undo,顾名思义“回滚日志”,是事务日志的一种。

  b(    作用是什么?

  在事务ACID过程中,实现的是“A”原子性的作用。当然CI的特性也和undo有关

10.redo和undo的存储位置

#redo位置
[root@db01 data]# ll /application/mysql/data/
-rw-rw---- mysql mysql Aug : ib_logfile0
-rw-rw---- mysql mysql Mar ib_logfile1
#undo位置
[root@db01 data]# ll /application/mysql/data/
-rw-rw---- mysql mysql Aug : ibdata1
-rw-rw---- mysql mysql Aug : ibdata2

MySQL学习【第十一篇存储引擎之事务解释】的更多相关文章

  1. MySQL学习【第九篇存储引擎】

    一.存储引擎介绍 1.我们知道mysql程序构成由连接层,sql层,存储引擎层.存储引擎层和磁盘进行交互,由其去取数据,而我们取得数据是表的形式展现出来,谁做的呢?就是存储引擎结构化成表的形式返回给用 ...

  2. MySQL学习笔记七:存储引擎

    1.MySQL存储引擎的设计采用“插件式”方案,用户可以很方便地选择使用哪种存储引擎,想使用mysql没有提供的引擎时,可以自己安装进去. 查看支持的存储引擎 mysql> show engin ...

  3. MySQL学习笔记(四):存储引擎的选择

    一:几种常用存储引擎汇总表 二:如何选择 一句话:除非需要InnoDB 不具备的特性,并且没有其他办法替代,否则都应该优先考虑InnoDB:或者,不需要InnoDB的特性,并且其他的引擎更加合适当前情 ...

  4. MySQL学习笔记:Engine存储引擎

    在使用Mysql建表过程中,有时候会遇到一些奇怪的现象.例如,如何插入数据就是查询不到数据,此时可能是建表的存储引擎设置成为engine=blackhole的原因. 1.engine=innodb 提 ...

  5. mysql概要(十一)存储引擎

    1.数据库对同样的数据可以不同的方式存储和管理,每种方式对应一种引擎. 1.1定义: 2.引擎种类的特点:

  6. MySql(十一):MySQL性能调优——常用存储引擎优化

    一.前言 MySQL 提供的非常丰富的存储引擎种类供大家选择,有多种选择固然是好事,但是需要我们理解掌握的知识也会增加很多.本章将介绍最为常用的两种存储引擎进行针对性的优化建议. 二.MyISAM存储 ...

  7. 数据库MySQL学习笔记高级篇

    数据库MySQL学习笔记高级篇 写在前面 学习链接:数据库 MySQL 视频教程全集 1. mysql的架构介绍 mysql简介 概述 高级Mysql 完整的mysql优化需要很深的功底,大公司甚至有 ...

  8. MySQL的四种主要存储引擎

    在数据库中存的就是一张张有着千丝万缕关系的表,所以表设计的好坏,将直接影响着整个数据库.而在设计表的时候,我们都会关注一个问题,使用什么存储引擎.等一下,存储引擎?什么是存储引擎? 什么是存储引擎? ...

  9. mysql-介绍、MySQL部署、数据类型、存储引擎

    数据库介绍  什么是数据? 数据(data)是事实或观察的结果,是对客观事物的逻辑归纳,是用于表示客观事物的未经加工的原始素材.数据是信息的表现形式和载体,可以是符号.文字.数字.语音.图像.视频等. ...

随机推荐

  1. (C# SQL Server) 数据库连接字符串

    Debug 一个SQL Server 2008 数据库连接的问题,老是提示: [67944] System.Data.SqlClient.SqlException (0x80131904): 在与 S ...

  2. 一步一步pwn路由器之环境搭建

    前言 本文由 本人 首发于 先知安全技术社区: https://xianzhi.aliyun.com/forum/user/5274 正式进入路由器的世界了.感觉路由器这块就是固件提取,运行环境修复比 ...

  3. linux下close 掉socket 之后 阻塞的recv 不会立即返回

    转载自:http://www.cnblogs.com/wainiwann/p/3942203.html 在开发的一个基于rtmp聊天的程序时发现了一个很奇怪的现象. 在windows下当我们执行 cl ...

  4. HTTP状态码和HTTP请求头

    HTTP报文是在Web服务器和浏览器之间进行交换的文本数据,一种是从浏览器发出的请求,一种是服务器发出的响应. 请求报文的第一行包括:1.请求方法 2.当前使用的HTTP协议版本 3.请求地址 GET ...

  5. Python标准库:内置函数hasattr() getattr() setattr() 函数使用方法详解

    hasattr(object, name) 本函数是用来判断对象object的属性(name表示)是否存在.如果属性(name表示)存在,则返回True,否则返回False.参数object是一个对象 ...

  6. vuejs plus d3

    vuejs 是一个数据驱动视图的前端框架,一切皆可以作为可重用的组件加以使用. d3则是数据可视化javascript库,如何将二者的长处相结合是一个挑战. https://tyronetudehop ...

  7. 从golang-gin-realworld-example-app项目学写httpapi (五)

    https://github.com/gothinkster/golang-gin-realworld-example-app/blob/master/users/middlewares.go 中间件 ...

  8. java笔记--ASCII编码认知和转换

    ASCII是基于拉丁字母的一套电脑编码系统,主要用于显示英语字符是当今最通用的单字节编码.包括128个字符. --如果朋友您想转载本文章请注明转载地址"http://www.cnblogs. ...

  9. 伪数组 arguments

    arguments代表的是实参.有个讲究的地方是:arguments只在函数中使用. (1)返回函数实参的个数:arguments.length 例子: fn(2,4); fn(2,4,6); fn( ...

  10. [EffectiveC++]item12:copy all parts of an object

    在小书C++中,4.2.2 派生类的构造函数和析构函数的构造规则(103页) 在定义派生类对象时,构造函数执行顺序如下: 基类的构造函数 对象成员的构造函数 派生类的构造函数.