MYSQL视图和mysql触发器(学会并使用day6)

MYSQL视图和mysql触发器

  • MYSQL视图
    • 使用视图的原因
    • 视图作用
    • 视图规则和限制
    • 视图的应用
    • 实际操作
      • 创建表并查看
      • 创建视图
      • 视图记录修改
      • 修改视图
  • mysql触发器
      • 创建触发器
      • employee表
      • employee02表
      • 创建一个触发器t1
      • 更新语句并查看employee02表
      • 删除触发器
      • 查询触发器
      • 触发器类型OLD和NEW

MYSQL视图

视图是指计算机数据库中的视图,是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。

视图是一个虚拟表,本身并不包含数据。作为一个select语句保存在数据字典中的。它是sql的查询结果,其内容由查询定义。是从另外一个角度看待原表。同真实的表一样,视图包含一系列带有名称的列和行数据,在使用视图时动态生成。视图的数据变化会影响到基表,基表的数据变化也会影响到视图[insert update delete ] ;

使用视图的原因

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

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

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

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

视图作用

  • 重复利用SQL语句
  • 简化SQL查询,快速取数据
  • 只用知道表的部分结构
  • 保护数据,根据特定授权
  • 更改数据格式和表示,视图可返回与底层表的表示和格式不同的数据
    视图只是用来查看存储在别处的数据的设施,本身不包含数据,返回的数据也是从其他表检索出来的。

视图规则和限制

  • 与表一样,命名必须是唯一的(不能出现同名视图或表名)。
  • 创建视图数目无限制,但是要考虑复杂查询创建为视图之后的性能影响。
  • 视图不能添加索引,也不能有关联的触发器或者默认值。
  • 视图可以提高安全性,必须具有足够的访问权限。
  • order by可用在视图中,但是如果从该视图检索数据select中含有order by ,那么该视图中的order by将被覆盖。
  • 视图可以和表一起使用。

视图的应用

  1. 权限控制时使用

    如某几个列,允许用户查询,其他列不允许查询

    可以通过视图,开放其中几列查询,起到权限控制作用

  2. 简化复杂查询时使用

    查询每个栏目下商品的平均价格,并按平均价格排序,查询出平均价格前3的栏目等使用。

  3. 视图能不能更新,删除,添加

    如果视图的每一行,是与物理表一 一对应的则可以

    视图的行是由物理表多行经过计算得到的结果,视图不可以更新的。

实际操作

创建表并查看

CREATE TABLE IF NOT EXISTS employee(
id int(11) auto_increment PRIMARY key,
name VARCHAR(22),
age int(4),
money int(20)
);

INSERT into employee VALUES(null,"张三",20,3650);
INSERT into employee VALUES(null,"李四",30,4502);
INSERT into employee VALUES(null,"王二",30,3650);
INSERT into employee VALUES(null,"麻子",50,8885);
INSERT into employee VALUES(null,"小红",20,4445);

SELECT * from employee;

MYSQL视图和mysql触发器(学会并使用day6)_第1张图片

创建视图

创建语法

-- CREATE VIEW <视图名> AS (SELECT语句)

<视图名>:指定视图的名称。该名称在数据库中必须是唯一的,
不能与其他表或视图同名。