服务热线:

新闻资讯
公司新闻
行业新闻
行业新闻
MySQL视图、存储过程与存储引擎

​ 前面的文章现已介绍了MySQL的索引与业务以及MySQL的备份与康复的相关的内容,本文将对MySQL凯发官网视图及存储进程以及存储引擎进行叙述。

​ 咱们在运用SQL句子进行多表查询的时分的指令是十分冗长而费事的,假如说这样的操作还十分多的运用的状况下就会加大工作人员的工作量,究竟不能确保如此长的代码不会写错,而且屡次进行如此杂乱的查询也会形成服务器资源占用比变大的问题,那么咱们有什么好的办法处理这样的问题呢?

​ 其实,咱们能够将这些需求常常查询的数据内容进行汇总到一个虚拟的表中,既便利了工作人员查询,也减轻了服务器的担负,而且在节省磁盘空间的一起也能够支撑数据的动态改变,而这样的表便是“视图”。

​ 其实视图是一种逻辑表,自身并不寄存数据。而是作为一个select句子保存咋数据字典中。经过视图,能够展示基表的备份数据;视图数据来自界说视图的查询中运用的表,运用视图动态生成。

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

视图所占资源较少,就好比是水中月,实践并不存在,可是会依据基表的改变而发生改变。

长处:

​ 1)简略:运用视图的用户彻底不需求关怀后边对应的表的结构、相关条件和挑选条件,对用户来说现已是过滤好的复合条件的成果集。

​ 2)安全:运用视图的用户只能拜访他们被答应查询的成果集,对表的权限办理并不能束缚到某个行某个列,可是经过视图就能够简略的完成。

​ 3)数据独立:一旦视图的结构确认了,能够屏蔽表结构改变对用户的影响,源表增加列对视图没有影响;源表修正列名,则能够经过修正视图来处理,不会形成对拜访者的影响。

​ 总而言之,运用视图的大部分状况是为了保证数据安全性,进步查询功率。

缺陷:

​ 1)功用差:数据库有必要把视图查询转化成对根本表的查询,假如这个视图是由一个杂乱的多表查询所界说,那么,即使是视图的一个简略查询,数据库也要把它变成一个杂乱的结合体,需求花费必定的时刻。

​ 2)修正束缚:当用户企图修正视图的某些信息时,数据库有必要把它转化为对根本表的某些信息的修正,关于简略的视图来说,这是很便利的,可是,关于比较杂乱的企图,可能是不行修正的。

​ 关于视图的算法,简略介绍一下,咱们需求在创立视图的时分指定,根本语法:
create + [algorithm = temptable/merge/undefined] + view + 视图名 + as + select句子 with check option;
视图算法,即系统对视图以及外部查询视图的select句子的一种解析办法。视图算法有三种,分别为:



创立一般视图指令格局:

create view 视图称号 as select +内容

​ 简略的说,便是一组SQL句子集,功用强壮,能够完成一些比较杂乱的逻辑功用,相似于JAVA言语中的办法;

​ 补白:存储进程跟触发器有点相似,都是一组SQL集,可是存储进程是主动调用的,且功用比触发器愈加强壮,触发器是某件事触发后主动调用;

​ 有输入输出参数,能够声明变量,有if/else, case,while等操控句子,经过编写存储进程,能够完成杂乱的逻辑功用;

​ 函数的遍及特性:模块化,封装,代码复用;
​ 速度快,只要初次履行需经过编译和优化进程,后续被调用能够直接履行,省去以上进程;


​ MySQL中的数据用各种不同的技能存储在文件或许内存中。而这些技能中的每一种技能都运用不同的存储机制、索引技巧、确定水平并终究供给广泛的不同的功用和才能。

​ 这些不同的技能以及与之相应的相关功用在MySQL中被称作为“存储引擎”。MySQL供给了多个不同的存储引擎,能够预先设置或许在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:刺进式存储引擎;是为了办理操作数据

​ MyISAM存储引擎是MySQL数据库系统5.5版别之前的默许存储引擎。考虑到的问题是:查询的次数远远大于更新的次数,因而需求履行读取操作数据速度比较快,而且不需求占用很多的内存和存储资源。

​ MyISAM办理非业务表,供给索引和字段办理,且具有表格确定机制然后优化多个并发的读写操作。

不支撑业务;

表格确定机制,数据在更新时确定整个表;

数据库在读写进程中相互堵塞;

能够经过key_buffer_size来设置缓存索引,进步拜访功用,削减磁盘IO读写压力

速度快且占用资源少;

不支撑外键束缚,只支撑全文索引;

存储文件为

1).frm 文件存储表界说;

2).MYD 数据文件扩展名

3).MYI 索引文件扩展名

​ InnoDB存储引擎是MySQL数据库系统535版别之后的默许存储引擎,是为了处理或许优化MyISAM存储引擎不足之处而发生的。

​ 能够这么说,InnoDB存储引擎是为处理巨大数据量时的最大功用而规划的。

依据需求挑选合适的存储引擎,然后考虑怎么修正;

检查数据库能够装备的存储引擎类型;

检查表正在运用的存储引擎类型;

装备存储引擎为所挑选的类型

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  | 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 

Engine列表明当时版别的MySQL所支撑的引擎类型;

Support列表明对应引擎是否能够运用,DEFAULT表明默许运用的类型此版别是InnoDB;

Transactions列表明对应引擎是否支撑业务;

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 

或许运用create指令也能够检查表的存储引擎

mysql show create table info;
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| info | CREATE TABLE "info"  NOT NULL AUTO_INCREMENT,
 "name" varchar DEFAULT NULL,
 "score" decimal DEFAULT NULL,
 PRIMARY KEY 
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set 

运用alter指令:alter table 表名 engine= 引擎称号

mysql alter table info engine=Myisam;
Query OK, 4 rows affected 
Records: 4 Duplicates: 0 Warnings: 0
mysql show create table info;
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| info | CREATE TABLE "info"  NOT NULL AUTO_INCREMENT,
 "name" varchar DEFAULT NULL,
 "score" decimal DEFAULT NULL,
 PRIMARY KEY 
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set 

或许在手艺编译装置时在MySQL主装备文件/etc/my.cnf的mysqld下增加:default-storage-engine=引擎称号,之后重启服务即可。

别的能够在创立表的时分就指定存储类型:create table test engine=MyISAM;

​ 本文介绍了MySQL数据库的视图以及简述了存储进程,其间咱们需求把握MySQL数据库系统的系统架构;其次咱们介绍了MySQL的两个存储引擎MyISAM和InnoDB,而且介绍各自的特色以及相应的运用场景;最终实例演示了怎么装备存储引擎的进程。

关注官方微信

全国服务热线