我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL逻辑分层介绍

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySQL逻辑分层介绍

MySQL逻辑分层介绍

上一篇文章主要介绍了MySQL在Ubuntu18.04系统上的安装,以及安装过程中可能会遇到的一些问题的解决方案。
在这篇文章里,开始介绍MySQL数据库的逻辑分层。通过本文的介绍,可以大致了解到MySQL的语句从客户端发出请求后,在服务器经历了怎样的过程。有助于后面MySQL优化的加深理解。

MySQL逻辑分层

一般来说,MySQL逻辑可分为四个层次,分别为:连接层,服务层,引擎层,存储层

连接层

提供与客户端连接的服务。
当客户端发出一个请求后(如增删改查的SQL语句),首先到达该层,将服务器与客户端建立连接。

服务层

服务层分两个作用:

  • 提供各种用户使用的接口。selectinsert
  • 提供SQL优化器(MySQL Query Optimizer)。 SQL优化器是MySQL服务层自带的一个服务,它会自动优化用户写得不是最优的SQL,使其达到优化的效果。但由于优化器毕竟只是优化器,有时候会将用户自定义的优化方案给更改掉,从而使用户自己的优化方案失效,这一点需要注意。

引擎层

引擎层提供各种数据存储的方式。MySQL的存储引擎有很多,比较常用的比如有InnoDB, MyISAM

InnoDB与MyISAM的区别为:

  • InnoDB 事务优先,所以适合高并发操作,使用的是行锁
  • MyISAM 性能优先,适合查询多的场景,使用的是表锁

查询数据库支持哪些引擎的SQL:

mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.00 sec)

从上面结果可知,MySQL5.7默认的引擎是InnoDB(DEFAULT),除了FEDERATED之外的引擎都支持。

查看当前数据库使用的引擎:

mysql> show variables like "%storage_engine%";
+----------------------------------+--------+
| Variable_name                    | Value  |
+----------------------------------+--------+
| default_storage_engine           | InnoDB |
| default_tmp_storage_engine       | InnoDB |
| disabled_storage_engines         |        |
| internal_tmp_disk_storage_engine | InnoDB |
+----------------------------------+--------+
4 rows in set (0.00 sec)

指定数据库对象的引擎:
一般是指定某一张表使用哪个引擎,因为MySQL的表都要依赖于database,所以在此之前,先创建一个database,如:

mysql> create database testDB;
Query OK, 1 row affected (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| testDB             |
+--------------------+
5 rows in set (0.00 sec)

如上,就创建成功了一个名为testDB的数据库,接下来该系列文章的所有演示,都在testDB中进行。
下面,就在testDB中创建一张名为tbl_A的表,表中有三个字段,分别为id(int 型,自增,主键),name(varchar型,长度为20),descript(varchar型,长度为80)。指定存储引擎为MyISAM

mysql> use testDB;
Database changed
mysql> create table tbl_A(
    -> id int(4) auto_increment,
    -> name varchar(20),
    -> descript varchar(80),
    -> primary key(id)
    -> )ENGINE=MyISAM;
Query OK, 0 rows affected (0.04 sec)

如上所示,MyISAM引擎的表就建成了。

存储层

最终的数据存储在存储层。

配置在终端直接操作MySQL

我们每次操作数据库,都要完成以下步骤,先使用mysql -uroot -p登录到客户端,然后指定数据库,然后才能在数据库里对表进行操作,显得比较繁琐,因此,可以定义一个别名,完成以上操作,在之后的操作中,直接使用该别名在终端操作即可,不需要每次都进入MySQL客户端。
如:我们将该别名定义为isql_s,在该命令后直接跟上SQL语句即可操作。配置方法如下:
先使用vim编辑器打开~/.bashrc,然后在最下面加上如下一句话:

alias isql_s="mysql -uroot -pcyc2010 -P3306 -DtestDB --auto-rehash -A -e"

以上命令的意思是,定义一个叫isql_s的别名,代替mysql -uroot -pcyc2010 -P3306 -DtestDB --auto-rehash -A -e命令。

  • 该命令指定mysql用户为root
  • -p后面跟的是root用户密码;
  • -P后面是端口号,如果是本地的话,默认为3306;(注意大小写,和密码的区别)
  • -D后面是database的名字,我这里指定的是testDB
  • --auto-rehash是自动补全,这个加不加无所谓;
  • -A代表不预读数据库信息,因为当数据库中表特别多时,预读数据库信息会使得打开数据库特别慢,有了这个参数,就可以提高打开效率。
  • -e代表后面可以直接跟SQL语句。
    见如下图120行所示:

配置完成后,按:wq!命令退出编辑器,然后使用如下命令,使配置参数生效:

$ . ~/.bashrc

接下来,就可以演示一下,如何使用isql_s命令直接访问数据库了。比如我要查本文建的表tbl_A的表结构:

chenyc@DESKTOP-Q5J25HR:~$ isql_s "desc tbl_A"
mysql: [Warning] Using a password on the command line interface can be insecure.
+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| id       | int(4)      | NO   | PRI | NULL    | auto_increment |
| name     | varchar(20) | YES  |     | NULL    |                |
| descript | varchar(80) | YES  |     | NULL    |                |
+----------+-------------+------+-----+---------+----------------+

可以看到,直接就能查询出来,而不需要重新进入数据库,指定database等一系列繁琐的操作。
使用以上命令时,可以看到一句Warning,该警告信息是说在命令行直接输入密码是不安全的,这个并不影响查询结果,可以不用管它。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL逻辑分层介绍

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL逻辑分层介绍

上一篇文章主要介绍了MySQL在Ubuntu18.04系统上的安装,以及安装过程中可能会遇到的一些问题的解决方案。在这篇文章里,开始介绍MySQL数据库的逻辑分层。通过本文的介绍,可以大致了解到MySQL的语句从客户端发出请求后,在服务器经历了怎样的过程。有助
MySQL逻辑分层介绍
2021-01-31

linux shell 逻辑运算符、逻辑表达式详细介绍

一、逻辑运算符 逻辑卷标 表示意思 1. 关于档案与目录的侦测逻辑卷标!-f 常用!侦测『档案』是否存在 eg: if [ -f filename ] -d 常用!侦测『目录』是否存在 -b 侦测是否为一个『 block 档案』 -
2022-06-04

MySQL三层逻辑架构是什么

小编给大家分享一下MySQL三层逻辑架构是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!MySQL三层逻辑架构MySQL的存储引擎架构将查询处理与数据的存储/
2023-06-27

MINA框架的视图层和逻辑层实例分析

本篇内容主要讲解“MINA框架的视图层和逻辑层实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MINA框架的视图层和逻辑层实例分析”吧!1. 开篇导言 目标用户:无编程经验,但对微信
2023-06-26

php二叉树的遍历以及进行逻辑操作的方法介绍

本篇内容主要讲解“php二叉树的遍历以及进行逻辑操作的方法介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php二叉树的遍历以及进行逻辑操作的方法介绍”吧!首先,我们还是要说明一下,我们学习的
2023-06-20

接入层Nginx架构及模块介绍分享

课程目标:1)帮助大家对Nginx有一定的认识2)熟悉Nginx有哪些应用场景3)熟悉Nginx特点和架构模型以及相关流程4)熟悉Nginx定制化开发的几种模块分类课程大纲:Nginx简介及特点Nginx应用场景Nginx框架模型介绍Ngi
2023-06-05

编程热搜

目录