# DML 事务 隔离级别 存储引擎对比

##DML    

insert into

第一种:

insert into tb_name [(col1,col2,....)]{values|value}(val1,val2,...)[,(val21,val22,....),....]

第二种:

insert into tb_name set col_name=val1,col2=val2,....

第三种(将一个表中的数据插入到另外一张表中):

insert into tb_name select clause

<!--replace的工作机制: 与Insert相同,除了在新插入的数据与表中的主键或唯一索引定义的数据相同会替换老的行;-->

update 更新数据

UPDATE [LOW_PRIORITY] [IGNORE] table_reference

SET col_name1=val1 [, col_name2={val2] ...

[WHERE where_condition]

[ORDER BY ...]

[LIMIT row_count]

update通常情况下,必须要使用where字句,或者使用limit限制要修改的行数

--safe-updates:启动时应该带选项

delete:删除数据

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name

[WHERE where_condition]

[ORDER BY ...]

[LIMIT row_count]

truncate tb_name ; 重置表的内容

##MYSQL基本架构

连接池 与用户请求建立连接

连接连接池用到的协议:文本或者二进制

二进制的协议高效一些

核心功能层 查询解析,分析,优化,内置函数

跨存储引擎的功能

query cache 缓存,只保存select查询

存储引擎层 数据的存入和提取

**explain:分析语句,索引的使用**

##MySQL

执行操作时施加的锁的模式

1.读锁:用户在读的时候施加的锁,为防止别人修改,但是用户可以读,还被称为共享锁

2.写锁:独占锁,排它锁。其他用户不能读,不能写

锁粒度: (数据量)

表锁:table lock

锁定了整张表

行锁:row lock

锁定了需要的行

粒度越小,开销越大,但并发性越好:

粒度越大,开销越小,但并非性越差;

锁的实现位置:

MySQL锁:可以手动使用,可以使用显示锁

存储引擎锁:自动进行的(隐式锁)

显示锁:

lock tables:施加锁

LOCK TABLES

tbl_name lock_type

[, tbl_name lock_type] ...

锁的类型 lock_type

(READ | WRITE)

unlock tables:解锁

InnoDB存储引擎也支持另外一种显示锁(锁定挑选出的部分行,行级锁)

select .... lock in share mode

select .... for update

<!--做备份时要手动施加读锁-->

##事务:Transaction

事务就是一组原子性的查询语句,也即将多个查询当作一个独立的工作单元

ACID测试:能够满足ACID测试就表示其支持事务,或兼容事务

A:Atomicity,原子性,都执行或者都不执行

C:Consistency,一致性,从一个一致性状态转到另外一个一致性状态

I:Isolaction,隔离性。一个事务的所有修改操作在提交前对其他事务时不可见的

D: Durability, 持久性,一旦事务得到提交,其所做的修改会永久有效

安全性越高,并发性越低

隔离级别:

READ UNCOMMITTEND(读未提交),脏读,不可重复读,幻读

READ COMMITTEND(读提交)  不可重读

REPEATABLE READ (可重读)

SERIALIZABLE(可串行化)强制事务的串行执行避免了幻读;性能极低

启动事务

start transaction

事务提交

commit

事务回顾

rollback

savepoint 控制回滚的位置

SAVEPOINT identifier

ROLLBACK [WORK] TO [SAVEPOINT] identifier

**如何没有显式启动事务,每个语句都会当作一个默认的事务,其执行完成会被自动提交

  1.select @@global.autocommit

  set global autocommit = 0

  2.cimmication:注意 关闭自动提交,请记得手动启动事务,应记得手动提交**

查看mysql的事务隔离级别

show global  variables like 'tx_isolation'

select @@global.tx_isolation

设置mysql的事务隔离级别

set global tx_isolation= 级别  (READ UNCOMMITTEND| READ COMMITTEND| REPEATABLE READ | SERIALIZABLE

**建议:对事物要求不特别严格的场景下,可以使用读提交**

MVCC:多版本并发控制

每个事务启动时,InnoDB会为每个启动的事务提供一个当下时刻的快照

为实现此功能,InnoDB会为每个表提供两隐藏的字段,一个用于保存行的创建时间,一个用于保存行的失效时间,(其实里面存储的是系统版本号 system version number)

旨在两个隔离级别下有效:read committed和repeatable read

##MySQL 的存储引擎

定义:存储引擎也通常被称作“表类型”

查看存储引擎

mysql> show engines;

mysql> show table status  [{FROM | IN} db_name] [LIKE 'pattern' | WHERE expr]

比如 :   mysql> show table status in hellodb;

mysql> show table status in hellodb where Name='class'\G

***************************************

Name 表名

Engine 存储引擎

Version:版本

Row_format:行格式

{DEFAULT|DYNAMIC|FIXED|COMMPRESSED|REDUNDANT|COMPACT}

Rows:表中的行数

Avg_row_length:平均每行包含的字节数

Data_length:表中数据总体大小,单位为字节

Max_data_length:表能够占用的最大空间,单位为字节,0表示么有上限

Index_length:索引的大小,单位为字节

Data_free:对于MyISAM表,表示已经分配但尚未使用的空间,其中包含此前删除行之后腾出来的空间

Auto_increment:下一个AUTO_INCREMENT的值

Create_time:表的创建时间

Update_time: 表数据的最后一次修改时间

Check_time: 使用CHECK TABLE或myisamchk最近一次检查表的时间

Collation:排序规则

Checksum:如果启动,则为表的checksum

Create_options:创建表时指定使用的其他选项

Comment:表的注释信息

MySQL数据文件

InnoDB

1.innodb_file_per_table=OFF,即是用共享表空间

每个表一个独有的格式定义文件:tb_name.frm

还有一个默认位于数据目录下的共享的表空间文件:ibdata#

2.innodb_file_per_table=ON,即是用独立表空间

每个表在数据库目录下存储两个文件

tb_name.frm

tb_name.ibd

<!--表空间: table space ,由InnoDB管理的特有格式数据文件,内部可同时存储数据和索引-->

MyISAM

每个表都在数据库目录下存储三个文件

tb_name.frm

tb_name.MYD

tb_name.MYI

**修改默认存储引擎:通过default_storage_engine服务变量实现**

##各存储引擎的特性

InnoDB:

支持事务,有事务日志

ib_logfile0

ib_logfile1

支持外键约束

支持MVCC(多版本并发控制)

支持聚簇索引

聚簇索引之外的其他索引,通常称之为辅助索引

行级锁:间隙锁

支持使用辅助索引

支持自使用hash索引

支持热备份

MyISAM:

全文索引

支持表压缩存放:做数据仓库,能节约存储空间并提升性能

支持空间索引

表级锁

延迟更新索引

不支持事务、外键和行级锁

崩溃后无法安全恢复数据

使用场景:只读数据,表较小,能够忍受崩溃后的修复操作和数据丢失

ARCHIVE

仅支持INSERT和SELECT,支持很好压缩功能

应用于存储日志信息,或其他按照时间序列实现的数据采集类的应用

CSV:

将数据存储为CSV格式,不支持索引,仅使用与数据交换场景

BLACKHOLE:

没有存储机制,任何发往次引擎的数据都会丢弃,其会记录二进制日志,因此,常用于多级复制架构中作中转服务器

MEMORY:

保存数据在内存中,内存表;常用于保存中间数据,如周期性的聚合数据等,也用于实现临时表

支持hash索引,使用表级锁,不支持BLOB和TEXT数据类型

MRG_MYISAM:

是MYISAM的一个变种,能够将多个MyISAM表合并成一个虚表

NDB:

是MySQL CLUSTER中专用的存储引擎、

第三方的存储引擎

XtraDB:增强的InnoDB,有Percona提供

编译安装时,下载XtraDB的源码替代MySQL存储引擎中的InnoDB的源码

PBXT:MariaDB自带此存储引擎

支持引擎级别的复制、外键约束,对SSD磁盘提供适当支持

支持事务、MVCC

TokuDB:

使用 Fractal Trees索引,适用存储大数据,拥有很好的压缩比,已经被引入MariaDB

##列式数据存储引擎:

Infobright:目前较有名的列式引擎,适用于海量数据存储场景,如PB级别,专为数据分析和数据仓库设计

InfiniDB

MonetDB

LucidDB

##开源社区存储引擎:

Aria:前身为Maria,是增强版的MyISAM(支持崩溃后安全恢复,支持数据缓存)

Groona:全文索引引擎

Mroonga:是基于Groona的二次开发版

OQGraph:由open query研发,支持图(网状 )结构的存储引擎

SphinxSE:为Sphinx全文搜索服务器提供了SQL接口

Spider:能将数据切分成不同的分片,比较高效透明的实现了分片(shared),并支持在分片上支持并行查询

***如何选择存储引擎

      是否需要事务

      备份的类型的支持

      崩溃后的恢复

      特有的特性***

##索引类型:

聚簇索引

辅助索引

B树索引

R树索引

hash索引

全文索引

转载于:https://blog.51cto.com/conandoyle/1766510

MySQL学习日志(二)相关推荐

  1. MySQL学习记录 (二) ----- SQL数据查询语句(DQL)

    相关文章: <MySQL学习记录 (一) ----- 有关数据库的基本概念和MySQL常用命令> <MySQL学习记录 (二) ----- SQL数据查询语句(DQL)> &l ...

  2. Mysql学习笔记(二)——表格及数据的插入

    Mysql学习笔记(二)--表格及数据的插入 文章目录 Mysql学习笔记(二)--表格及数据的插入 1.Mysql常用指令 2.创建表格 A.数据类型 B.完整性约束条件 3.查看表格 4.修改表格 ...

  3. MySQL学习(二)复制

    复制解决的问题是保持多个服务器之间的数据的一致性,就如同通过复制保持两个文件的一致性一样,只不过MySQL的复制要相对要复杂一些,其基本过程如下: 1)在主库上将数据更改记录到二进制日志(Binary ...

  4. 数据库MYSQL学习系列二

    2.1-MySQL数据类型 Number不止一种 ××× 浮点型 ××× INT SMALLINT MEDIUMINT BIGINT type Storage Minumun Value Maximu ...

  5. Mysql学习(二)之安装、开启自启、启动、重启、停止

    安装 方法一:通过homebrew brew install mysql 方法二:通过官网dmg文件安装(Mac) https://dev.mysql.com/downloads/mysql/ 通过h ...

  6. MySQL学习笔记(二):MyISAM 存储引擎

    MyISAM 存储引擎 MyISAM 基于旧的 (不再可用) ISAM 存储引擎, 但有许多有用的扩展. 每个 MyISAM 表都存储在三个文件中的磁盘上.这些文件具有以表名开头的名称, 并具有用于指 ...

  7. Mysql学习之二. ken_len索引长度计算

    一. 字符类型 不可变长char(n) : 字符集默认类型 * n + 可为空 * 1 (如果不可为空,则不加1). 可变长varchar(n) : 字符集默认类型 * n + 2 (记录变可变长字符 ...

  8. 《软件加密与解密》第三版学习日志二

    一 常见软件保护技术 1.序列保护方式 注册过程一般是用户把自己的私人信息,如用户名.邮件地址.及其特征码等,告诉软件公司,软件公司根据用户的信息利用预先写好的一个计算注册程序,称为注册机keygen ...

  9. sql分类及基本sql操作,校对规则(mysql学习笔记二)

    sql针对操作对象分为不同语言 数据操作(管理)语言 DML或者将其细分为 ( 查询  DQL 管理(增,删,改)  DML) 数据定义语言(对保存数据的格式进行定义) DDL 数据库控制语言(针对数 ...

  10. MySQL 学习笔记 二

    Ø function 函数 函数的作用比较大,一般多用在select查询语句和where条件语句之后.按照函数返回的结果, 可以分为:多行函数和单行函数:所谓的单行函数就是将每条数据进行独立的计算,然 ...

最新文章

  1. 虚拟桌面的备份恢复最佳实践 第一部分
  2. 只需4秒,这个算法就能鉴别你的LV是真是假
  3. 源码篇——AsyncTask机制
  4. Struts result param详细设置
  5. 白领丽人:这六行盛产“钻石王老五”
  6. Visual Studio Code 使用 ESLint 增强代码风格检查 - gyzhao - 博客园
  7. P3810-[模板]三维偏序(陌上花开)【CDQ分治,树状数组】
  8. messagedigest 图片加密_MessageDigest 加密和解密2
  9. apache phoenix 入门_实现Phoenix入门
  10. 怎么安装python环境和编译器_Python环境安装以及PyCharm编译器的安装
  11. (转)MTK_面试的几个主要问题 必看
  12. 【Java必备技能四】如何使用泛型?
  13. 小米8SE 开箱及体验
  14. suse11 升级glibc版本
  15. 定义结构体变量的三种方法
  16. 一级建造师考试备考顺序
  17. 差之毫厘谬之千里!带你认识CPU后缀含义
  18. Habit-基于JFinal+vue+element的后台通用模板项目
  19. 男人二十岁后应该学会的13个习惯
  20. 【移动终端应用开发】实验2:SQLite数据库的使用

热门文章

  1. 5.6 tensorflow2实现奇异值分解(SVD)——python实战(上篇)
  2. opencv2+ glob循环读入图片,将文件夹中的图片统一格式
  3. 1016 部分A+B (15 分)—PAT (Basic Level) Practice (中文)
  4. Linux系统中设置静态ip地址
  5. pycharm中tensorflow代码不能自动补全或import红线问题解决
  6. openstack排错
  7. angularjs自动加载和手动加载
  8. schedule_timeout与mdelay的区别
  9. 【源代码】Image Deformation Using Moving Least Squares算法的实现
  10. [转载]ASPNET MVC表格呈现利器:MvcContrib.UI.Grid