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

MySQL数据库的视图、存储过程和存储引擎

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

本文主要介绍了Mysql数据库的视图和mysql数据库的存储过程,还介绍了Mysql的两个存储引擎MyISAM和InnoDB,希望大家通过这篇文章有所收获。一、前言MySQL 视图(View)是一种虚拟存在

本文主要介绍了Mysql数据库的视图和mysql数据库的存储过程,还介绍了Mysql的两个存储引擎MyISAM和InnoDB,希望大家通过这篇文章有所收获。

一、前言

MySQL 视图(View)是一种虚拟存在的表,同真实表一样,视图也由列和行构成,但视图并不实际存在于数据库中。行和列的数据来自于定义视图的查询中所使用的表,并且还是在使用视图时动态生成的。

二、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数据库的视图、存储过程和存储引擎有进一步的了解吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网数据库频道,感谢各位的阅读。

您可能感兴趣的文档:

--结束END--

本文标题: MySQL数据库的视图、存储过程和存储引擎

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

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

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

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

下载Word文档
猜你喜欢
  • MySQL数据库的视图、存储过程和存储引擎
    本文主要介绍了MySQL数据库的视图和MySQL数据库的存储过程,还介绍了MySQL的两个存储引擎MyISAM和InnoDB,希望大家通过这篇文章有所收获。一、前言MySQL 视图(View)是一种虚拟存在...
    99+
    2022-10-18
  • MySQL视图、存储过程与存储引擎
    MySQL视图、存储过程与存储引擎 一、前言 ​ 前面的文章已经介绍了MySQL的索引与事务以及MySQL的备份与恢复的相关的内容,本文将对MySQL视图及存储过程以及存储引擎进行讲述。 二、MySQL...
    99+
    2022-10-18
  • MySQL数据库存储引擎
    MySQL数据库存储引擎MySQL数据库是一种关系型数据库,数据时存放在数据库中的一张一张的表中的,各个表之间或有关联,表中的每行相关,每列是不相关。这是关系型数据库的基本存储方式。MySQL存储引擎是为了...
    99+
    2022-10-18
  • Mysql数据库的存储引擎——必看教程
    目录 一、什么是存储引擎 二、MySQL支持的存储引擎 三、常见的存储引擎 1.InnoDB存储引擎         2.MyISAM存储引擎         3.MEMORY存储引擎 四、选择存储引擎 总结  ✨✨✨大家好,我是会飞...
    99+
    2023-10-09
    数据库 mysql java
  • MySQL-视图与存储过程
    一、MySQL基础知识 增: 增加单条数据:insert into 表 (列名,列名...) values (值,值,值...) 增加多条数据:insert into 表 (列名,列名...) value...
    99+
    2022-10-18
  • MySQL 视图、函数和存储过程详解
    目录一、视图二、函数三、存储过程MySQL 是一种流行的关系型数据库管理系统,其具有强大的功能和灵活性,使其成为了许多企业和个人喜爱的数据库选择。在 MySQL 中,视图、函数和存储...
    99+
    2023-05-18
    MySQL 视图 函数和存储过程 MySQL 函数和存储过程
  • MySQL 视图、函数和存储过程详解
    目录一、视图二、函数三、存储过程mysql 是一种流行的关系型数据库管理系统,其具有强大的功能和灵活性,使其成为了许多企业和个人喜爱的数据库选择。在 MySQL 中,视图、函数和存储过程是常见的数据库对象,它们都有助于提...
    99+
    2023-04-26
    MySQL 视图 函数和存储过程 MySQL 函数和存储过程
  • mysql数据库的存储过程
    本篇内容介绍了“mysql数据库的存储过程”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 一、创建存储过...
    99+
    2022-10-18
  • 数据库学习之九:mysql 存储引擎
    九、mysql 存储引擎 1、课程大纲 存储引擎的介绍 mysql中的存储引擎分类 mysql存储引擎设置 mysql,innodb引擎存储结构 mysql中的事物 mysql中的锁 2、mysql存储引擎介绍 mys...
    99+
    2014-05-09
    数据库学习之九:mysql 存储引擎
  • 索引、视图、存储过程和触发器
    1、索引:数据排序的方法,快速查询数据分类:唯一索引:不允许有相同值主键索引:自动创建的主键对应的索引,命令方式不可删聚集索引:物理顺序与索引顺序一致,只能创建一个非聚集索引:物理顺序与索引顺序不一致,可创...
    99+
    2022-10-18
  • Mysql数据库中的存储引擎是什么
    这篇文章主要介绍了Mysql数据库中的存储引擎是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Mysql数据库中的存储引擎是什么文章都会有所收获,下面我们一起来看看吧。存储...
    99+
    2023-04-03
    mysql
  • Mysql数据库支持的存储引擎对比
    目录存储引擎MySQL支持的存储引擎并发控制锁锁颗粒事务外键索引各种存储引擎的特点存储引擎 Mysql可以将数据以不同的技术存储在文件(内存)中,这种技术就称为存储引擎。 每一种存储...
    99+
    2022-11-12
  • SQL Server存储过程(数据库引擎)使用详解
    存储过程(数据库引擎) 一、背景知识1.1、使用存储过程的好处1.2、存储过程的类型 二、创建存储过程三、修改存储过程四、删除存储过程五、执行存储过程5.1、建议5.2、使用 Transa...
    99+
    2023-10-01
    数据库 sql 服务器 sqlserver 大数据
  • Mysql存储引擎与数据存储的原理是什么
    Mysql存储引擎与数据存储的原理是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。前言作为一名开发人员,在日常的工作中会难以避免地接触到数...
    99+
    2022-10-18
  • mysql(6)-mysql的视图功能和存储过程
           本篇博客介绍的mysql的视图功能和存储过程以及它们的作用和实例说明 ! 一 . MySQL视图VIEW1.视图简介在MySQL中视图功能就比较类似于Exel中的筛选功能通俗理解就是将一张表中...
    99+
    2022-10-18
  • mysql数据库存储数据的过程
    这篇文章主要讲解了“mysql数据库存储数据的过程”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql数据库存储数据的过程”吧! 存储过程如下: J...
    99+
    2022-10-18
  • MySql中的存储引擎和索引
    目录一、MySql的逻辑结构二、什么是存储引擎MySQL支持的存储引擎三、操作四、数据库的索引索引的分类五、索引操作一、MySql的逻辑结构 MySQL体系结构分为四层:分别是连接层...
    99+
    2022-11-13
    MySql存储引擎 MySql索引
  • MySQL的存储引擎InnoDB和MyISAM
    目录1. MyISAM底层存储1.1 MyISAM底层存储(非聚集索引方式)1.2 InnoDB底层存储(聚集索引方式)2. InnoDB与MyISAM简介3. MyISAM与Inn...
    99+
    2022-11-13
  • MySQL系列之五 视图、存储函数、存储过程、触发器
    目录系列教程一、视图 1、视图的创建 2、查看视图定义 3、删除视图 二、存储函数 1、系统函数 2、自定义函数(user-defined function:UDF) 三、存储过程 ...
    99+
    2022-11-12
  • MySQL数据库存储引擎的分类有哪些
    这篇文章主要讲解了“MySQL数据库存储引擎的分类有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL数据库存储引擎的分类有哪些”吧!1、简介My...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作