广告
返回顶部
首页 > 资讯 > 数据库 >MySQL视图、存储过程与存储引擎
  • 611
分享到

MySQL视图、存储过程与存储引擎

2024-04-02 19:04:59 611人浏览 八月长安
摘要

Mysql视图、存储过程与存储引擎 一、前言 ​ 前面的文章已经介绍了mysql的索引与事务以及Mysql的备份与恢复的相关的内容,本文将对MySQL视图及存储过程以及存储引擎进行讲述。 二、MySQL

Mysql视图、存储过程与存储引擎

一、前言

​ 前面的文章已经介绍了mysql索引事务以及Mysql的备份与恢复的相关的内容,本文将对MySQL视图及存储过程以及存储引擎进行讲述。

二、MySQL视图

2.1问题引出——视图的概念

​ 我们在使用SQL语句进行多表查询的时候的命令是非常冗长而麻烦的,如果说这样的操作还非常多的使用的情况下就会加大工作人员的工作量,毕竟不能保证如此长的代码不会写错,并且多次进行如此复杂的查询也会造成服务器资源占用比变大的问题,那么我们有什么好的办法解决这样的问题呢?

​ 其实,我们可以将这些需要经常查询的数据内容(可能存在于多个表中)进行汇总到一个虚拟的表中,既方便了工作人员查询,也减轻了服务器的负担,并且在节约磁盘空间的同时也可以支持数据的动态变化,而这样的表就是“视图”。

​ 其实视图是一种逻辑表,本身并不存放数据。而是作为一个select语句保存咋数据字典(可以理解为一个容器)中。通过视图,可以展现基表的备份数据;视图数据来自定义视图的查询中使用的表,使用视图动态生成。

基表:用来创建视图的表base table

2.2为什么要使用视图——视图的特点及优缺点

视图所占资源较少,就好比是水中月,实际并不存在,但是会根据基表的变化而产生变化。

优点:

​ 1)简单:使用视图的用户完全不需要关心后面对应的表的结构、关联条件和筛选条件,对用户来说已经是过滤好的复合条件的结果集。

​ 2)安全:使用视图的用户只能访问他们被允许查询的结果集,对表的权限管理并不能限制到某个行某个列,但是通过视图就可以简单的实现。

​ 3)数据独立:一旦视图的结构确定了,可以屏蔽表结构变化对用户的影响,源表增加列对视图没有影响;源表修改列名,则可以通过修改视图来解决,不会造成对访问者的影响。

​ 总而言之,使用视图的大部分情况是为了保障数据安全性,提高查询效率。

缺点:

​ 1)性能差:数据库必须把视图查询转化成对基本表的查询,如果这个视图是由一个复杂的多表查询所定义,那么,即使是视图的一个简单查询,数据库也要把它变成一个复杂的结合体,需要花费一定的时间。

​ 2)修改限制:当用户试图修改视图的某些信息时,数据库必须把它转化为对基本表的某些信息的修改,对于简单的视图来说,这是很方便的,但是,对于比较复杂的试图,可能是不可修改的。

2.3简述视图算法

​ 对于视图的算法,简单介绍一下,我们需要在创建视图的时候指定,基本语法:
create + [alGorithm = temptable/merge/undefined] + view + 视图名 + as + select语句 with check option;
视图算法,即系统对视图以及外部查询视图的select语句的一种解析方式。视图算法有三种,分别为:

  • undefined:未定义(默认的),这不是一种实际使用的算法,而是一个“推卸责任”的算法。在未定义的情况下,告诉系统,视图没有定义算法,请自己选择。
  • temptable:临时表算法,系统先执行视图的select语句,后执行外部查询语句。
  • merge:合并算法,系统先将视图对应的select语句与外部查询视图的select语句进行合并,然后再执行。此算法比较高效,且在未定义算法的时候,经常会默认选择此算法。

2.4创建视图命令

创建一般视图命令格式:

create view 视图名称 as select +内容

三、MySQL存储过程(偏向软件开发方向)

3.1何为存储过程?

​ 简单的说,就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类似于JAVA语言中的方法;

​ 备注:存储过程跟触发器有点类似,都是一组SQL集,但是存储过程是主动调用的,且功能比触发器更加强大,触发器是某件事触发后自动调用;

3.2存储过程特点

​ 有输入输出参数,可以声明变量,有if/else, case,while等控制语句,通过编写存储过程,可以实现复杂的逻辑功能;

​ 函数的普遍特性:模块化,封装,代码复用;
​ 速度快,只有首次执行需经过编译和优化步骤,后续被调用可以直接执行,省去以上步骤;

四、MySQL存储引擎

4.1存储引擎介绍

​ MySQL中的数据用各种不同的技术存储在文件或者内存中。而这些技术中的每一种技术都使用不同的存储机制、索引技巧、定水平并最终提供广泛的不同的功能和能力。

​ 这些不同的技术以及与之相应的相关功能在MySQL中被称作为“存储引擎”。MySQL提供了多个不同的存储引擎,可以预先设置或者在MySQL服务器中启用。

4.2MySQL的体系架构

MySQL视图、存储过程与存储引擎

以上主要由6部分组成,主要有各种组件以及存储引擎和文件系统。我们做简单的介绍

Connectors:连接组件,需要有驱动支持;主要用于使用不同的语言代码程序和MySQL的交互

Connection Pool:连接池组件;主要是管理、缓冲用户的连接,线程处理等需要缓存的需求

Management Service & Utilities:管理服务与工具组件;例如进行备份恢复、MySQL复制、集群等;

SQL Interface:SQL接口;主要接受用户的SQL命令语句,并且返回用户需要查询的结果;

Parser:查询解析器;当SQL命令语句传递到解析器的时候会被解析器验证和解析(权限、语法结构);

Optimizer:查询优化器;SQL语句在执行之前使用查询优化器对查询进行优化;举个例子:

select id,name from where hobby = ‘read’;

1)这个select语句查询会先根据where语句进行选取;

2)其次根据id和name进行属性投影;

3)结合两个查询条件输出最终的查询结果

Caches & Buffers:缓存;当查询缓存中有命中的查询结果,查询语句就可以直接去查询缓存中取数据;

Plugggable Storage Engines:插入式存储引擎;是为了管理操作数据(存储、更新、查询数据的方法方式)

4.3MyISAM存储引擎

4.3.1MyISAM的介绍

​ MyISAM存储引擎是MySQL数据库系统5.5版本之前的默认存储引擎。考虑到的问题是:查询的次数远远大于更新的次数,因此需要执行读取操作数据速度比较快,并且不需要占用大量的内存和存储资源。

​ MyISAM管理非事务表,提供索引和字段管理,且拥有表格锁定机制从而优化多个并发的读写操作。

4.3.2MyISAM的特点
  1. 不支持事务;

  2. 表格锁定机制,数据在更新时锁定整个表;

  3. 数据库在读写过程中互相阻塞;

  4. 可以通过key_buffer_size来设置缓存索引,提高访问性能,减少磁盘IO读写压力

  5. 速度快且占用资源少;

  6. 不支持外键约束,只支持全文索引;

  7. 存储文件为

    1).frm 文件存储表定义;

    2).MYD 数据文件扩展名

    3).MYI 索引文件扩展名

4.3.2MyISAM的适用场景
  1. 业务无需支持事务;
  2. 单方面读取较多的业务,或单方面写数据的业务;
  3. 并发访问少的业务;
  4. 数据修改较少的业务;
  5. 服务器硬件资源较低

4.4InnoDB存储引擎

4.4.1InnoDB的介绍

​ InnoDB存储引擎是MySQL数据库系统535版本之后的默认存储引擎,是为了解决或者优化MyISAM存储引擎不足之处而产生的。

​ 可以这么说,InnoDB存储引擎是为处理巨大数据量时的最大性能而设计的。

4.4.2InnoDB的特点
  1. 支持事务,支持4个事务隔离级别;
  2. 行级锁定,除了全表扫描是表级锁定;
  3. 读写阻塞与事务隔离级别相关;
  4. 缓存高效,既能缓存索引也能缓存数据;
  5. 表与主键以簇的方式存储;
  6. 支持分区、表空间;
  7. 支持外键约束;
4.4.3InnoDB的适用场景
  1. 业务需要事务的支持;
  2. 并发量高的业务;
  3. 业务数据更新频繁;微博等
  4. 业务数据一致性要求较高:银行业务
  5. 硬件资源较高

五、如何配置合适的存储引擎?

5.1配置修改存储引擎的步骤

根据需求选择适合的存储引擎,然后考虑如何修改;

(1)查看数据库可以配置的存储引擎类型;

(2)查看表正在使用的存储引擎类型;

(3)配置存储引擎为所选择的类型

5.2具体的操作步骤

5.2.1查看数据库可以配置的存储引擎类型;
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)

Engine列表示当前版本的MySQL所支持的引擎类型;

Support列表示对应引擎是否可以使用,DEFAULT表示默认使用的类型此版本(MySQL5.7.17)是InnoDB;

Transactions列表示对应引擎是否支持事务;

5.2.2查看表正在使用的存储引擎类型;
mysql> show table status from student where name = 'info';
+------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------+
| Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time         | Update_time | Check_time | Collation       | Checksum | Create_options | Comment |
+------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------+
| info | InnoDB |      10 | Dynamic    |    4 |           4096 |       16384 |               0 |            0 |         0 |              5 | 2020-01-08 19:47:38 | NULL        | NULL       | utf8_general_ci |     NULL |                |         |
+------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------+
1 row in set (0.01 sec)

或者使用create命令也可以查看表的存储引擎

mysql> show create table info;
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                                   |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| info  | CREATE TABLE "info" (
  "id" int(3) NOT NULL AUTO_INCREMENT,
  "name" varchar(6) DEFAULT NULL,
  "score" decimal(5,2) DEFAULT NULL,
  PRIMARY KEY ("id")
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)
5.2.3配置存储引擎为所选择的类型

使用alter命令:alter table 表名 engine= 引擎名称

mysql> alter table info engine=Myisam;
Query OK, 4 rows affected (0.01 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> show create table info;
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                                   |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| info  | CREATE TABLE "info" (
  "id" int(3) NOT NULL AUTO_INCREMENT,
  "name" varchar(6) DEFAULT NULL,
  "score" decimal(5,2) DEFAULT NULL,
  PRIMARY KEY ("id")
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

或者在手工编译安装时在MySQL主配置文件/etc/my.cnf的mysqld下添加:default-storage-engine=引擎名称,之后重启服务即可。

另外可以在创建表的时候就指定存储类型:create table test (id int) engine=MyISAM;

六、总结

​ 本文介绍了MySQL数据库的视图以及简述了存储过程,其中我们需要掌握MySQL数据库系统的体系架构;其次我们介绍了MySQL的两个存储引擎MyISAM和InnoDB,并且介绍各自的特点以及相应的使用场景;最后实例演示了如何配置存储引擎的过程。

您可能感兴趣的文档:

--结束END--

本文标题: MySQL视图、存储过程与存储引擎

本文链接: https://www.lsjlt.com/news/44531.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • MySQL视图、存储过程与存储引擎
    MySQL视图、存储过程与存储引擎 一、前言 ​ 前面的文章已经介绍了MySQL的索引与事务以及MySQL的备份与恢复的相关的内容,本文将对MySQL视图及存储过程以及存储引擎进行讲述。 二、MySQL...
    99+
    2022-10-18
  • MySQL数据库的视图、存储过程和存储引擎
    本文主要介绍了MySQL数据库的视图和MySQL数据库的存储过程,还介绍了MySQL的两个存储引擎MyISAM和InnoDB,希望大家通过这篇文章有所收获。一、前言MySQL 视图(View)是一种虚拟存在...
    99+
    2022-10-18
  • MySQL-视图与存储过程
    一、MySQL基础知识 增: 增加单条数据:insert into 表 (列名,列名...) values (值,值,值...) 增加多条数据:insert into 表 (列名,列名...) value...
    99+
    2022-10-18
  • SQL-视图与存储过程
    原文:https://www.cnblogs.com/ccccz/p/13982650.html...
    99+
    2015-05-07
    SQL-视图与存储过程 数据库入门 数据库基础教程
  • 【MySQL】存储引擎
    文章目录 1. 前言2. MySQL的体系结构3. 存储引擎简介4. InnoDB介绍5. MyISAM介绍6. Memory7. 存储引擎的选择8. 总结 1. 前言 存储引擎是 MySQL 的核心组件之一,负责数据的存储和管...
    99+
    2023-08-16
    mysql 数据库 sql
  • MySQL 存储引擎
      存储引擎 DBMS使用存储引擎进行数据的创建、查询、更新、删除操作。 不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎还可以获得特定的功能。 MySQL提供了多种存储引擎,最常见的有3种。    ...
    99+
    2015-11-16
    MySQL 存储引擎
  • MYSQL——存储引擎
       MYSQL的存储引擎1   MYSQL可以将数据以不同的技术存储在文件和内存中,这种技术就成为存储引擎2   每一种存储引擎使用不同的存储机制、索引技巧、锁定水...
    99+
    2022-10-18
  • mysql-存储引擎
    存储引擎 完整的建表语句: CREATE TABLE dept ( DEPTNO int(2) NOT NULL, DNAME varchar(14) DEFAULT NULL, LOC varchar(13) DEF...
    99+
    2020-03-17
    mysql-存储引擎
  • Mysql--存储引擎
      1.文件系统: 1.1 操作系统组织和存取数据的一种机制。 1.2 文件系统是一种软件。 2.文件系统类型:ext2 3 4 ,xfs 数据 2.1 不管使用什么文件系统,数据内容不会变化 2.2 不...
    99+
    2021-09-03
    Mysql--存储引擎
  • Mysql -存储引擎
    1、存储引擎:是表级别的类型。 2、查看表存储引擎的方法: (1)、mysql> show table status in mydb where name='classes'\G; 1. ...
    99+
    2022-10-18
  • MYSQL存储引擎
    存储引擎 InnoDB      (1) InnoDB给MySQL提供了具有提交、回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。InnoDB锁定在行级并且也在SELECT语句中提供一个类似Oracle的非锁定读。这些功能增加...
    99+
    2021-04-17
    MYSQL存储引擎
  • MySQL 存储引擎
    简介:存储引擎是数据库底层软件组件,数据库管理系统使用数据引擎进行创建、查询、更新和删除操作。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能。    常见分类有:InnoDB、MyISAM、Memory等; 一、InnoDB  ...
    99+
    2017-04-10
    MySQL 存储引擎 数据库入门 数据库基础教程 数据库 mysql
  • MySQL—存储引擎(上)
    ♥️作者:小刘在C站 ♥️个人主页:小刘主页 ♥️每天分享云计算网络运维课堂笔记,努力不一定有回报,但一定会有收获加油!一起努力,共赴美好人生! ♥️树高千尺,落叶归根人生不易,人间真情 目录 1). 连接层 2). 服务层 ...
    99+
    2023-09-07
    服务器 运维 mysql
  • MySQL之存储引擎
    Storage Engine是指表类型,也即在表创建时指明其使用的存储引擎,同一库中不同表可以使用不同的存储引擎,但建议要使用同一种存储引擎 MySQL体系结构 存储引擎 In...
    99+
    2022-10-18
  • MySQL 存储引擎(2)
    首先我们带着下边三个问题来认识存储引擎 存储引擎在MySQL中的作用是什么? MySQL都有哪些存储引擎 SQL又与存储引擎有什么关系? 存储引擎在MySQL中的作用是什么? 顾名思义,存储引擎就是用于存储我们的数据的。在关系型数据库中...
    99+
    2016-06-21
    MySQL 存储引擎(2)
  • mysql federated存储引擎
    通过federated存储引擎建立远程连接表 # 开启federated存储引擎 SHOW ENGINES ; MyISAM YES InnoDB DEFAULT ... FEDERATED YES # 创建...
    99+
    2020-02-03
    mysql federated存储引擎
  • MySQL的存储引擎
    1、存储引擎概念 • MySQL中的数据用各种不同的技术存储在文件中,每一种技术都使用不同的存储机制、索引技巧、锁定水平并最终提供不同的功能和能力,这些不同的技术以及配套的功能在MySQL中称为存储引擎 • 存储引擎是MySQL将数据存储在...
    99+
    2023-09-07
    mysql 数据库 java
  • MySQL体系结构与存储引擎
     1、MySQL体系结构 MySQL的体系结构可以分为两层,MySQL Server层和存储引擎层。 在MySQL Server层中又包括连接层和SQL层,如图1-1所示。 应用程序通过接口( 如ODBC、JDBC)来连接MySQL。 最...
    99+
    2021-05-04
    MySQL体系结构与存储引擎
  • Mysql存储引擎与数据存储的原理是什么
    Mysql存储引擎与数据存储的原理是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。前言作为一名开发人员,在日常的工作中会难以避免地接触到数...
    99+
    2022-10-18
  • mysql存储引擎记录
    MyISAM Mysql5.5之前的默认数据库引擎,最为常用。拥有较高的插入,查询速度,但不支持事务InnoDB事务型数据库的首选引擎,支持ACID事务,支持行级锁定,MySQL 5.5起成为默认...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作