美文网首页基础原理数据库
5 MySQL 工作原理 存储引擎配置和特点

5 MySQL 工作原理 存储引擎配置和特点

作者: Kokoronashi | 来源:发表于2019-01-20 04:49 被阅读11次

MySQL 工作原理 存储引擎配置和特点

[TOC]

1547907234411

MySQL 工作原理

MySQL体系结构

1547907266525

MySQL存储引擎

  1. 作为可插拔式的组件提供

MySQL 服务软件自带的功能程序,处理表的处理器.

不同存储引擎具有不同的功能和数据存储方式

  1. 默认的存储引擎

    MySQL 5.0/5.1 MyISAM

    MySQL 5.5+ InnDB

存储引擎的配置

查看

列出可用的存储引擎类型

SHOW ENGINES;

查看当前表使用存储引擎

SHOW CREATE TABLE 表名;

修改

建表时手动指定存储引擎

未指定时,使用默认存储引擎

create table 表名(字段名 类型 约束条件) engine=存储引擎;

mysql> create table t1(id int);  #使用默认引擎
mysql> create table t2(name char(15)) engine=memory;
mysql> create table t3(id int,age int)engine=innodb;

修改已存在表存储引擎

alter table 表名 engine=存储引擎;

mysql> alter table t4 engine=myisam;

修改设置默认存储引擎

mysql配置文件中添加如下,重启mysql.

[mysqld]
default-storage-engine=innodb

存储引擎特点

各存储引擎特点

存储引擎 主要特点 相关的表文件
myisam 1. 支持表级锁 2. 不支持事务,事务回滚,外键 表名.frm 表名.MYI 表名.MYD
innodb 1.支持行级锁 2.支持事务,事务回滚,外键 表名.frm 表名.ibd ibdata1 ib_logfile0 ib_logfile1
memory 数据放在内存中,数据库重启数据丢失 表名.frm

表文件功能

表文件 功能
表名.frm 存放表结构(即字段信息)
表名.MYI 存放MyISAM引擎表的索引
表名.MYD 存放MyISAM引擎表的数据
表名.ibd 存放InnoDB引擎表的索引和数据
ibdata1 事务未提交的SQL命令
ib_logfile0 ib_logfile1 事务已经提交的SQL命令

MySQL锁机制

锁粒度

粒度 说明 对应存储引擎
表级锁 一次直接对整张表进行加锁 MyISAM
行级锁 只锁定某一行 InnoDB
页级锁 对整个页面进行加锁 ( MySQL 管理数据的基本存储单位,内存中1M就是一页 )

锁类型

类型 说明 对应命令
读锁( 共享锁 ) 支持并发读 select
写锁( 互斥锁,排它锁 ) 独占锁,上锁期间其他线程不能读表写表. insert update delete

查看当前的锁状态

检查Table_lock开头的变量,%作通配符

SHOW STATUS LIKE 'Table_lock%';

mysql> SHOW STATUS LIKE 'Table_lock%';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| Table_locks_immediate | 99    |
| Table_locks_waited    | 0     |
+-----------------------+-------+

执行查询操作多的表,适合使用myisam存储引擎,这样可以节省系统资源.

执行写操作多的表,适合使用innodb存储引擎,这样可以加大并发访问.

事务

一次sql操作,从开始到结束的过程.

事务回滚

在事务执行过程中,任意一步操作失败,恢复所有的操作.

事务日志:

记录所有sql操作,回滚时即参考事务日志回滚

ibdata1 未提交的SQL命令

​ LSN 日志序列号

ib_logfile0 已经提交的SQL命令

ib_logfile1 已经提交的SQL命令

事务特性(ACID)

名称 说明
Atomic 原子性 事务的整个操作是一个整体,不可分割,要么全部成功,要么全部失败
Consistency 一致性 事务操作的前后,表中的记录没有变化
Isolation 隔离性 事务操作是相互隔离不受影响的
Durability 持久性 数据一旦提交,不可改变,永久改变表数据

示例

需要用的几个命令 说明
show variables like "autocommit"; 查看提交状态
set autocommit=off; 关闭自动提交
rollback; 数据会滚
commit; 提交数据
#未提交,事务没有执行完,回滚则恢复到最初.
mysql> select * from t1;
+------+------+
| id   | name |
+------+------+
|    2 | leo  |
|    1 | bob  |
+------+------+

mysql> delete from t1 where id=1;
Query OK, 1 row affected (0.00 sec)

mysql> rollback;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from t1;
+------+------+
| id   | name |
+------+------+
|    2 | leo  |
|    1 | bob  |
+------+------+
2 rows in set (0.00 sec)

#commit提交后,无法回滚
mysql> select * from t1;
+------+------+
| id   | name |
+------+------+
|    2 | leo  |
|    1 | bob  |
+------+------+
2 rows in set (0.00 sec)

mysql> delete from t1 where id=2;
Query OK, 1 row affected (0.00 sec)

mysql> commit;
Query OK, 0 rows affected (0.00 sec)

mysql> rollback;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from t1;
+------+------+
| id   | name |
+------+------+
|    1 | bob  |
+------+------+
1 row in set (0.00 sec)

相关文章

  • 5 MySQL 工作原理 存储引擎配置和特点

    MySQL 工作原理 存储引擎配置和特点 [TOC] MySQL 工作原理 MySQL体系结构 MySQL存储引擎...

  • MySQL介绍

    mysql介绍 其他数据库介绍 mysql特点 mysql存储引擎类型及特点 关于mysql单表存储 mysql介...

  • MySQL系列(二)----MySQL存储引擎详解

    一、MySQL常用存储引擎及特点 1、InnoDB存储引擎 从MySQL5.5版本之后,MySQL的默认内置存储引...

  • mysql 高级

    关键文件 日志文件 数据文件 配置文件 存储引擎 mysql使用插件式的存储引擎,MySQL存储引擎有InnoDB...

  • InnoDB介绍

    InnoDB介绍 InnoDB是事务安全的mysql存储引擎,也是mysql的默认存储引擎,特点是行锁设计、支持M...

  • MySQL 存储引擎简介及字符集配置

    一、各种存储引擎的特点   mysql支持多种存储引擎,在处理不通类型应用时,可以选择不同的存储引擎提高应用的效率...

  • mysql数据库引擎

    存储引擎就是表的类型以及表在计算机的存储方式。 存储引擎的概念是MySQL的特点,Oracle中没有专门的存储引擎...

  • Mysql引擎

    Innodb引擎:MySQL5.5之后的默认存储引擎。 特点: 具有提交(Commit)、回滚(Rollback)...

  • mysql 存储引擎

    mysql 存储引擎 每个表可单独配置存储引擎 对比 总结 MyISAM是5.5.5版本之前的默认引擎(效率更高)...

  • MySQL原理 - InnoDB引擎 - 行记录存储 - Red

    本文基于 MySQL 8 在上一篇:MySQL原理 - InnoDB引擎 - 行记录存储 - Compact格式 ...

网友评论

    本文标题:5 MySQL 工作原理 存储引擎配置和特点

    本文链接:https://www.haomeiwen.com/subject/qywtjqtx.html