前言
从上篇文章开始,咱们开始给你们陆续介绍mysql的优化部分。上篇文章首先给你们介绍了在Linux中安装和配置mysql的相关内容,接着给你们介绍了索引的相关内容,主要包括:索引的概述、索引的优、缺点,另外还给你们介绍了索引的存储引擎以及索引的底层原理B+树、B树的区别与联系,最后给你们介绍了索引的分类、建立、修改以及查看和删除索引的相关内容。最后介绍的就是咱们在建立索引的一些主要原则。
接下来的这篇文章给你们介绍视图的相关知识,主要包括视图的基本概念、建立或者修改视图到最后的查看视图。另外介绍就是触发器的相关内容,主要包括触发器的相关概念、建立日志表、插入、修改以及删除触发器等相关内容。
接下来给你们介绍视图相关的内容。
mysql
1、视图
一、视图概述
视图实际上是一种虚拟存在的一种表。视图并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,而且是在使用视图时动态生成的。通俗的讲,视图就是一条select语句执行后返回的结果集。因此咱们在建立视图的时候,主要的工做就落在建立这条sql查询语句上。
相对于普通的表来讲,视图有如下的优点:
sql
- 简单:使用视图的用户彻底不须要关心后面对应表的结构、关联条件和筛选条件,对用户来讲已是过滤好的复合条件的结果集
- 安全:使用视图的用户只能访问他们被容许查询的结果集,对表的权限管理并不能限制到某个行、某个列,可是经过视图就能够简单的实现。
- 数据独立:一旦视图的结构肯定了,能够屏蔽表结构变化对用户的影响,源表增长列对视图没有影响;源表修改列名,则能够经过修改视图来解决,不会形成对访问者的影响。
二、建立或者修改视图
咱们接下来给你们介绍建立以及修改视图,首先给你们介绍的是建立视图。建立视图的语法以下:数据库
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;
三、查看视图
前面给你们介绍了修改以及建立视图,而且经过案例给你们具体的展现了如何在实际中建立和修改视图的语句。接下来给你们介绍查看视图的相关内容。
其实从mysql5.1版本开始,使用show tables命令的时候不只显示了表的名字,同时也会显示视图的名字,而不存在单独显示视图的show views命令。具体的命令以下:
优化
show tables;
一样使用show table status命令的时候,不但能够显示表的信息,同时也能够实现视图的信息。
spa
show table status
四、删除视图
最后,给你们介绍删除的视图。具体的语法以下:.net
drop view [if exists] view_name [, view_name]...[restrict | cascade];
给你们介绍了删除视图的示例,在以前咱们建立的视图city_country_view删除视图;具体内容以下:3d
drop view city_country_view;
2、触发器
前面给你们介绍了视图的相关内容,包括视图的概述以及视图的建立、修改、查看以及删除相关的操做,接下来给你们介绍触发器的相关内容,包括触发器的基本概念以及建立触发器、删除触发器、查看触发器等相关内容。首先给你们介绍触发器的基本内容。
一、触发器基本概念
触发器是与表有关的数据库对象,指在insert/update/delete以前或以后,触发并执行触发器中定义的sql语句集合。触发器的这种特性能够协助应用在数据库端确保数据的完整性,日志记录,数据校验等操做。使用别名OLD和NEW来引用触发器中发生变化的记录内容,这与其余的数据库是类似的。如今的触发器还只支持行级触发,不支持语句级触发。具体的触发类型的使用以下:
二、建立触发器
接下来,给你们介绍建立触发器语法结构:
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$
三、删除触发器
前面介绍了建立、修改触发器,接下来,给你们介绍建立触发器语法结构:
drop trigger [schema_name.]trigger_name
其实,若是没有指定schema_name,默认的即为当前的数据库。
四、查看触发器
前面介绍了了触发器的建立、删除、修改相关操做,接下来查看触发器。咱们能够经过执行show triggers命令查看触发器的状态、语法等信息。
show trigger;
总结
从上篇文章开始,为你们介绍mysql性能的优化,本文为你们介绍了视图以及触发器的相关内容,视图主要包括视图的基本概念、建立和修改视图,另外就是视图的查看以及删除视图。另外给你们介绍的是触发器,主要介绍的是触发器的基本概念以及触发器的建立、删除以及查看触发器的各类操做。所以,mysql是很重要的一个技能,几乎计算机中的每一个岗位都须要一个mysq技能,所以,须要咱们特别的掌握。生命不息,奋斗不止,咱们天天努力,好好学习,不断提升本身的能力,相信本身必定会学有所获。加油!!!