专栏首页全部文章Mysql性能调优(二)

Mysql性能调优(二)

前言

  从上篇文章开始,我们开始给大家陆续介绍mysql的优化部分。上篇文章首先给大家介绍了在Linux中安装和配置mysql的相关内容,接着给大家介绍了索引的相关内容,主要包括:索引的概述、索引的优、缺点,另外还给大家介绍了索引的存储引擎以及索引的底层原理B+树、B树的区别与联系,最后给大家介绍了索引的分类、创建、修改以及查看和删除索引的相关内容。最后介绍的就是我们在创建索引的一些主要原则。   接下来的这篇文章给大家介绍视图的相关知识,主要包括视图的基本概念、创建或者修改视图到最后的查看视图。另外介绍就是触发器的相关内容,主要包括触发器的相关概念、创建日志表、插入、修改以及删除触发器等相关内容。   接下来给大家介绍视图相关的内容。

一、视图

1、视图概述

  视图其实是一种虚拟存在的一种表。视图并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。通俗的讲,视图就是一条select语句执行后返回的结果集。所以我们在创建视图的时候,主要的工作就落在创建这条sql查询语句上。   相对于普通的表来说,视图有以下的优势:

  • 简单:使用视图的用户完全不需要关心后面对应表的结构、关联条件和筛选条件,对用户来说已经是过滤好的复合条件的结果集
  • 安全:使用视图的用户只能访问他们被允许查询的结果集,对表的权限管理并不能限制到某个行、某个列,但是通过视图就可以简单的实现。
  • 数据独立:一旦视图的结构确定了,可以屏蔽表结构变化对用户的影响,源表增加列对视图没有影响;源表修改列名,则可以通过修改视图来解决,不会造成对访问者的影响。

2、创建或者修改视图

  我们接下来给大家介绍创建以及修改视图,首先给大家介绍的是创建视图。创建视图的语法如下:

create [or replace] [algorithm = {undefined | merge | temptable}]
view view_name [(column_list)]
as select_statement
[with [cascaded | local] check option]

  接下来给大家介绍修改视图,修改视图的语法如下:

alter [algorithm = {undefined | merge | temptable}]
view view_name [(column_list)]
as select_statement
[with [cascaded | local] check option]

  这里需要注意的是给大家介绍语法中相应的相关选项;

  • with [cascaded | local] check option:决定了是否允许更新数据使记录不再满足视图的条件。
  • local:只要满足本视图的条件就可以更新。
  • cascaded:必须满足所有针对该视图的所有视图的条件才可以更新。

  我们通过一个案例来创建以及修改视图。具体的表以及数据也就是上篇文章的数据。具体的sql语句如下:

create or replace view city_country_view
as
select t.*, c.country_name from country c, city t where c.country_id = t.country.id;

3、查看视图

  前面给大家介绍了修改以及创建视图,并且通过案例给大家具体的展示了如何在实际中创建和修改视图的语句。接下来给大家介绍查看视图的相关内容。   其实从mysql5.1版本开始,使用show tables命令的时候不仅显示了表的名字,同时也会显示视图的名字,而不存在单独显示视图的show views命令。具体的命令如下:

show tables;

  同样使用show table status命令的时候,不但可以显示表的信息,同时也可以实现视图的信息。

show table status

4、删除视图

  最后,给大家介绍删除的视图。具体的语法如下:

drop view [if exists] view_name [, view_name]...[restrict | cascade];

  给大家介绍了删除视图的示例,在之前我们创建的视图city_country_view删除视图;具体内容如下:

drop view city_country_view;

二、触发器

  前面给大家介绍了视图的相关内容,包括视图的概述以及视图的创建、修改、查看以及删除相关的操作,接下来给大家介绍触发器的相关内容,包括触发器的基本概念以及创建触发器、删除触发器、查看触发器等相关内容。首先给大家介绍触发器的基本内容。

1、触发器基本概念

  触发器是与表有关的数据库对象,指在insert/update/delete之前或之后,触发并执行触发器中定义的sql语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性,日志记录,数据校验等操作。使用别名OLD和NEW来引用触发器中发生变化的记录内容,这与其他的数据库是相似的。现在的触发器还只支持行级触发,不支持语句级触发。具体的触发类型的使用如下:

2、创建触发器

  接下来,给大家介绍创建触发器语法结构:

create trigger trigger_name
before/after insert/update/delete
on tb1_name [for each row]
trigger_stmt;

  介绍完创建触发器的语法之后,接下来给大家通过一个案例来创建相应的触发器。本案例的需求如下:

  通过触发器记录emp表的数据变更日志,包含增加、修改、删除。

  因此,我们首先创建一张日志表

create table emp_logs(
	id int(11) not null auto_increment,
	operation varchar(20) not null commit '操作类型, insert/update/delete',
	operate_time datetime not null comment "操作时间",
	operate_id int(11) not null comment "操作表的ID",
	operate_params varchar(500) comment "操作参数",
	primary key(`id`)
)engine=innodb default charset=utf8;

  我们在创建的表上进行创建触发器,通过触发器的记录emp表的数据变更日志emp_logs,包含增加、修改、删除,具体的语句如下:

create trigger emp_insert_trigger
after insert on emp
for each row
begin
	insert into emp_logs(id, operation, operate_time, operate_id, operate_params)
	values(null, 'insert', now(), new.id, concat('插入后(id:', new.id, ',name', new.name,', age:', new.age, ', salary: ', new.salary, ')'));
end$

create trigger emp_update_trigger
after update on emp
for each row
begin
	insert into emp_logs(id, operation, operate_time, operate_id, operate_params)
	values(null, 'update', now(), new.id, concat('修改前(id:', old.id, ',name', old.name,', age:', old.age, ', salary: ', old.salary, ')', '修改后(', new.id, ',name', new.name,', age:', new.age, ', salary: ', new.salary, ')'));
end$

create trigger emp_update_trigger
after delete on emp
for each row
begin
	insert into emp_logs(id, operation, operate_time, operate_id, operate_params)
	values(null, 'delete', now(), old.id, concat('删除前(id:', old.id, ',name', old.name,', age:', old.age, ', salary: ', old.salary, ')'));
end$

3、删除触发器

  前面介绍了创建、修改触发器,接下来,给大家介绍创建触发器语法结构:

drop trigger [schema_name.]trigger_name

  其实,如果没有指定schema_name,默认的即为当前的数据库。

4、查看触发器

  前面介绍了了触发器的创建、删除、修改相关操作,接下来查看触发器。我们可以通过执行show triggers命令查看触发器的状态、语法等信息。

show trigger;

总结

  从上篇文章开始,为大家介绍mysql性能的优化,本文为大家介绍了视图以及触发器的相关内容,视图主要包括视图的基本概念、创建和修改视图,另外就是视图的查看以及删除视图。另外给大家介绍的是触发器,主要介绍的是触发器的基本概念以及触发器的创建、删除以及查看触发器的各种操作。因此,mysql是很重要的一个技能,几乎计算机中的每个岗位都需要一个mysq技能,因此,需要我们特别的掌握。生命不息,奋斗不止,我们每天努力,好好学习,不断提高自己的能力,相信自己一定会学有所获。加油!!!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Day47:求1+2+3+……+n

    思路一:   众所周知,我们学的等差数列求和:1+2+3+……+n=(1 + n)*n/2=(n+n^2)/2,这里我们可以用到一个math库中的pow()函...

    stefan666
  • Day48:不用加减乘除做加法

    1、背景知识介绍: (1)、java中的位运算   计算机中是这样定义位运算的,计算机在底层使用的是二进制补码进行运算。对应的二进制位进行操作,计算机只识别...

    stefan666
  • 面试汇总(九):数据结构与算法常见面试总结(二)——堆与栈、数组、排序

      上一篇文章我们介绍了在面试中数据结构中树的常见的面试题。这篇文章我们继续给大家介绍常见的问题。

    stefan666
  • MySQL 视图

    数据库视图是虚拟表或逻辑表,它被定义为具有连接的SQL SELECT查询语句。 因为数据库视图与数据库表类似,它由行和列组成,因此可以根据数据库表查询数据。 大...

    房上的猫
  • SAP Fiori的ABAP编程模型-CDS视图创建

    让我们开始为我们的应用程序创建数据模型。通常,最佳做法是创建一个Package并封装将由CDS视图创建的数据模型。

    matinal
  • SwiftUI:使用 @EnvironmentObject 从环境中读取自定义值

    SwiftUI的环境使我们可以使用来自外部的值,这对于读取Core Data上下文或视图的展示模式等很有用。但是我们也可以将自定义对象发送到环境中,并在以后将它...

    韦弦zhy
  • MySQL引擎和视图的点

    存储引擎Storage Engine:MySQL中的数据、索引以及其他对象是如何存储的,是一套文件系统的实现。

    孙玄@奈学教育
  • Mysql进阶三板斧(一)带你彻底搞懂View视图的原理及应用

    既然视图的定义是基于基本表的,哪为什么还要定义视图呢?这是因为合理地使用视图能够带来许多好处:

    陈哈哈
  • MySQL 视图

    看到这里,或许你已经对MySQL 的基本操作了如指掌,这篇文章讲解MySQL高级功能中 视图的概念及其用法。

    技能锦囊
  • MySQL 视图

    ​看到这里,或许你已经对MySQL 的基本操作了如指掌,这篇文章讲解MySQL高级功能中 视图的概念及其用法。

    技能锦囊

扫码关注云+社区

领取腾讯云代金券