• 创建视图与触发器


     CREATE VIEW test.v AS SELECT * FROM t;

      表和视图共享数据库中相同的名称空间,因此,数据库不能包含具有相同名称的表和视图。 

      视图必须具有唯一的列名,不得有重复,就像基表那样。默认情况下,由SELECT语句检索的列名将用作视图列名。要想为视图列定义明确的名称,

    可使用可选的column_list子句,列出由逗号隔开的ID。column_list中的名称数目必须等于SELECT语句检索的列数。

    SELECT * FROM v;
    

      视图定义服从下述限制:
      · SELECT语句不能包含FROM子句中的子查询。
      · SELECT语句不能引用系统或用户变量。
      · SELECT语句不能引用预处理语句参数。
      · 在存储子程序内,定义不能引用子程序参数或局部变量。
      · 在定义中引用的表或视图必须存在。但是,创建了视图后,能够舍弃定义引用的表或视图。要想检查视图定义是否存在这类问题,可使用CHECK TABLE语句。
      · 在定义中不能引用TEMPORARY表,不能创建TEMPORARY视图。
      · 在视图定义中命名的表必须已存在。
      · 不能将触发程序与视图关联在一起。
      在视图定义中允许使用ORDER BY,但是,如果从特定视图进行了选择,而该视图使用了具有自己ORDER BY的语句,它将被忽略。
      对于定义中的其他选项或子句,它们将被增加到引用视图的语句的选项或子句中,但效果未定义。例如,如果在视图定义中包含LIMIT子句,而且从特定视图进行了选择,而该视图使用了具有自己LIMIT子句的语句,那么对使用哪个LIMIT未作定义。相同的原理也适用于其他选项,如跟在SELECT关键字后的ALL、DISTINCT或SQL_SMALL_RESULT,并适用于其他子句,如INTO、FOR UPDATE、LOCK IN SHARE MODE、以及PROCEDURE。
      如果创建了视图,并通过更改系统变量更改了查询处理环境,会影响从视图获得的结果

    用  DESCRIBE  语句查看视图的基本信息

    语法如下:

        DESCRIBE   视图名;

    【注】  DESCRIBE  可以简写为  DESC  

    用  SHOW  TABLE  STATUS   语句查看视图的基本信息

    语法如下:

        SHOW   TABLE  STATUS   LIKE  ‘视图名’;

    用  SHOW  CREATE  VIEW  语句查看视图的详细信息

    语法如下:

        SHOW   CREATE   VIEW  视图名;

    触发器

    CREATE <触发器名> < BEFORE | AFTER >
    <INSERT | UPDATE | DELETE >
    ON <表名> FOR EACH Row<触发器主体>
    

      

    INSERT | UPDATE | DELETE |BEFORE | AFTER

    • INSERT:将新行插入表时激活触发器。例如,INSERT 的 BEFORE 触发器不仅能被 MySQL 的 INSERT 语句激活,也能被 LOAD DATA 语句激活。
    • DELETE: 从表中删除某一行数据时激活触发器,例如 DELETE 和 REPLACE 语句。
    • UPDATE:更改表中某一行数据时激活触发器,例如 UPDATE 语句。
    • BEFORE 和 AFTER,触发器被触发的时刻,表示触发器是在激活它的语句之前或之后触发。若希望验证新数据是否满足条件,则使用 BEFORE 选项;若希望在激活触发器的语句执行之后完成几个或更多的改变,则通常使用 AFTER 选项。

    查看数据库中已有的触发器,则可以使用 SHOW TRIGGERS 语句

    创建一个名为 SumOfSalary 的触发器,触发的条件是向数据表 tb_emp8 中插入数据之前,对新插入的 salary 字段值进行求和计算。输入的 SQL 语句和执行过程如下所示

    CREATE TRIGGER SumOfSalary
        BEFORE INSERT ON tb_emp8
        FOR EACH ROW
        SET @sum=@sum+NEW.salary;
    

      

    创建一个名为 double_salary 的触发器,触发的条件是向数据表 tb_emp6 中插入数据之后,再向数据表 tb_emp7 中插入相同的数据,并且 salary 为 tb_emp6 中新插入的 salary 字段值的 2 倍。输入的 SQL 语句和执行过程如下所示。

     CREATE TRIGGER double_salary
         AFTER INSERT ON tb_emp6
         FOR EACH ROW
         INSERT INTO tb_emp7
         VALUES (NEW.id,NEW.name,deptId,2*NEW.salary);
    

      

  • 相关阅读:
    iOS 字体
    接口继承和实现继承的区别
    实验楼实验——LINUX基础入门
    试看看能不能发布
    mysql binlog恢复
    percona
    ssh2 php扩展
    sphinx
    ngios
    socketlog
  • 原文地址:https://www.cnblogs.com/clc1996/p/12464785.html
Copyright © 2020-2023  润新知