Mysql数据库的几个特点
Mysql数据库的几个特点
- 0.存储引擎MyISAM和InnoDB区别
- MyISAM
- InnoDb
- 1. 事物的隔离级别
- 读未提交 Read uncommitted
- 读提交 Read committed
- 可重复读 Repeatable read
- 串行化 serializable
- 可能出现的问题
- 脏读
- 不可重复读
- 幻读
- 2.聚集索引和非聚集索引
- 聚集索引
- 非聚集索引
- 3.回表
- 4.explain执行计划
导读:0.存储引擎MyISAM和InnoDB区别 1.事物级别 2.聚集索引和非聚集索引 3.回表 4.explain执行计划
0.存储引擎MyISAM和InnoDB区别
MyISAM
- 不支持事务,所以每次查询都是原子的;
- 支持表级锁,即每次操作是对整个表加锁;
- 存储表的总行数;
- 一个MYISAM表有三个文件:索引文件、表结构文件、数据文件;
- 采用非聚集索引(Non-clustered),索引文件的数据域存储指向数据文件的指针。
InnoDb
- 支持ACID的事务;
- 支持行级锁及外键约束;
- 不存储总行数;
- 一个InnoDb引擎存储在一个文件空间(共享表空间,表大小不受操作系统控制,一个表可能分布在多个文件里),也有可能为多个,受操作系统文件大小的限制;
- 主键索引采用聚集索引(索引的数据域存储数据文件本身),辅索引的数据域存储主键的值;因此从辅索引查找数据,需要先通过辅索引找到主键值,再访问辅索引;
- 使用自增主键,防止插入数据时,为维持B+树结构,文件的大调整。
1. 事物的隔离级别
查询隔离级别:SHOW VARIABLES LIKE 'transaction_isolation%';
读未提交 Read uncommitted
解释:一个事务可以读取到其他事务尚未提交的数据,也就是脏数据。
可能出现的问题:脏读
、不可重复读
和幻读
读提交 Read committed
解释:事务A只能读取到已经提交的数据,也就是其他事务B已经提交的数据。当其他事务B正在修改某个数据时,读提交的事务A会被阻塞,直到该数据被事务B提交为止。
解决:脏读
,可能出现的问题:不可重复读
和幻读
Sql Server,Oracle的默认隔离级别是Read committed
。
可重复读 Repeatable read
解释:是指在一个事务A中多次读取同一数据时,每次读取的结果都是一样的。这是因为在可重复读的隔离级别下,一个事务A读取的数据会被锁定,直到事务A提交或回滚,其他事务B才会对其进行修改。
解决:脏读
和不可重复读
,可能出现的问题:幻读
MySQL的默认隔离级别就是Repeatable read
。
串行化 serializable
解释:所有事务都必须按照串行的方式执行,也就是说,每个事务必须等待前一个事务完成后才能执行。
解决:脏读
、不可重复读
和幻读
可能出现的问题
脏读
事务可以读取到其他事务尚未提交的数据,也就是脏数据
不可重复读
在一个事务中,同一个查询语句执行两次或多次,但是返回的结果不同。这是由于在事务执行期间,另一个事务修改了查询结果中的某些数据(指update已存在的数据)
。
幻读
在一个事务中,同一个查询语句执行两次或多次,但是返回的结果不同。这是由于在事务执行期间,另一个事务插入或删除了查询结果中的某些数据。(指insert新的数据或delete数据)
2.聚集索引和非聚集索引
聚集索引
- 一个表只能有一个
- 存储记录是物理上连续存在
- 叶子节点就是数据节点,存储的数据本身
非聚集索引
- 一个表存在多个:普通索引,唯一索引,全文索引
- 存储记录是逻辑上的连续,物理存储并不连续
- 叶子节点是数据的聚集索引的key,一个指针指向对应的数据块
3.回表
通过非聚集索引查找的过程是先找到该索引key对应的聚集索引的key,然后再拿聚集索引的key到主键索引树上查找对应的数据
4.explain执行计划
详情见:Mysql-执行计划explain解释、explain各字段意思、执行计划explain输出列说明
Mysql数据库的几个特点相关推荐
- .net连接mysql数据_.net连接MYSQL数据库的方法及示例!
连接MYSQL数据库的方法及示例 方法一: 使用MYSQL推出的MySQL Connector/Net is an ADO.NET driver for MySQL 该组件为MYSQL为ADO.NET ...
- MySQL数据库+命令大全+常用操作
格式:mysql -h主机地址 -u用户名 -p用户密码 1. 例:连接到本机上的MYSQL 首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命令mysql -uroot -p,回车后提示 ...
- mysql数据库是一个软件呐_15款好用的mysql管理软件
1. Induction Induction是一款用于理解数据关系的开源管理工具,它可用来探索行/列,运行查询和数据可视化等方面.该工具支持多种数据库,包括PostgreSQL,MySQL,SQLit ...
- c语言连接数据库例子,c语言操作mysql数据库小例子_互帮互助(C language MySQL database operation example _ mutual help).doc...
这是精心收集的精品经典资料,值得下载保存阅读! c语言操作mysql数据库小例子_互帮互助(C language MySQL database operation example _ mutual h ...
- C语言对mysql数据库的操作
C语言对mysql数据库的操作 原文:C语言对mysql数据库的操作 这已经是一相当老的话题.不过今天我才首次使用,把今天的一些体会写下来,也许能给一些新手带来一定的帮助,更重要的是供自己今后忘记的怎 ...
- JDBC连接MySQL数据库及演示样例
JDBC是Sun公司制定的一个能够用Java语言连接数据库的技术. 一.JDBC基础知识 JDBC(Java Data Base Connectivity,java数据库连接)是一种用 ...
- python用django连接mysql_三分钟了解Django如何连接Mysql数据库
处理用户注册请求.Django连接MysqL数据库相关配置.数据库迁移命令: my_Dproject/app01/views.py 在views函数文件中添加register函数,来处理用户注册 ...
- mysql数据库比对视频教程_MySQL数据库全学习实战视频教程(27讲 )
一)mySQL数据库简介:MySQL属于关系型数据库,是当前最流行的关系型数据库管理系统之一,在WEB项目使用方面,MySQL是最好的 RDBMS应用软件. 二)本mySQL数据库视频教程目录如下: ...
- eclipse关闭mysql数据库,有关于用eclipse连接mysql数据库出现的问题以及解决办法
写帖子是为了让更多的程序员减少再调试bug中的时间,也希望大家能一起把自己遇到的错误及解决方法写出来.我是一个刚开始学java的大二学生,用的是<java开发实战经典>.在写p646的程序 ...
- bd2和mysql语法区别,经验:在MySQL数据库中,这4种方式可以避免重复的插入数据!...
最常见的方式就是为字段设置主键或唯一索引,当插入重复数据时,抛出错误,程序终止,但这会给后续处理带来麻烦,因此需要对插入语句做特殊处理,尽量避开或忽略异常,下面我简单介绍一下,感兴趣的朋友可以尝试一下 ...
最新文章
- 模板方法模式小记【原创】
- java 区间树_线段树(区间树)之区间染色和4n推导过程
- 亚洲综合竞争力排名发布:韩国位居第1,中国第9,大家怎么看?
- 第十八期:专家认为对“人工智能+教育”应持审慎态度
- 下拉选择_在管理Excel中实现联动下拉选择
- 微软面试题1、把二元查找树转变成排序的双向链表
- bzoj3944 Sum 杜教筛
- python函数做n_【python】定义函数、参数、递归(n!)
- python开发飞船游戏
- rendering omni shadow in one pass.
- Spring(二十二):Spring 事务
- 计算机代码大全喜欢你,2020微信表白代码大全
- 【Git】解决Untracked Files Prevent Checkout的问题
- 群联2251-07 海力士TLC-16K 颗粒 U盘重新量产记录
- 苹果手机开热点电脑/安卓手机无法链接?
- 前端项目实战145-React.Fragment
- 软件测试才是系统级别错误,软件测试部BUG级别定义
- 【社会网络分析_04】ucinet中心度密度测量与凝聚子群发现
- 直流无刷电机霍尔传感器2种安装方式
- PHP微信公众平台自定义菜单