zoukankan      html  css  js  c++  java
  • SQL视图&触发器

    SQL视图

    在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表。

    视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。我们可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,我们也可以提交数据,就像这些来自于某个单一的表。

    SQL CREATE VIEW 语法

    CREATE VIEW view_name AS
    SELECT column_name(s)
    FROM table_name
    WHERE condition

    视图的优点:1,可以简化操作,2,可以建立前台和后台的缓冲,3,可以合并分割数据,4,最重要的是可以提高安全性。

    视图的作用:从下图可得,对视图的增删查改和对数据表的作用是一样的

    删除视图:(不能修改视图定义,如果要修改,只能删除再重新创建)

    DROP VIEW view_name

    触发器:

    触发器(trigger):监视某种情况,并触发某种操作。

    触发器创建语法四要素:1.监视地点(table) 2.监视事件(insert/update/delete) 3.触发时间(after/before) 4.触发事件(insert/update)

    create trigger triggerName
    
    after/before insert/update/delete on 表名
    
    for each row   #这句话在mysql是固定的
    
    begin
    
    sql语句;
    
    end;

    使用触发器的时候,注意要用delimeter更改结束符,否则默认以;结束符,就无法成功设定beigin内部的sql语句了。

    delimiter $
    create trigger tg1
    after insert on o
    for each row 
    begin
    update g set num=num-3 where id=1;
    end$

     对于上面的触发器,还可以改成如下:(对于insert而言,新插入的行用new来表示,行中的每一列的值用new.列名来表示。对于delete而言:原本有一行,后来被删除,想引用被删除的这一行,用old来表示,old.列名可以引用被删除的行的值。)

    create trigger tg2
    after insert on o
    for each row 
    begin
    update g set num=num-new.much where id=new.gid;(注意此处和第一个触发器的不同)
    end$

    after和before的区别:

    after是先完成数据的增删改,再触发,触发的语句晚于监视的增删改操作,无法影响前面的增删改动作;也就是说先插入订单记录,再更新商品的数量;

    before是先完成触发,再增删改,触发的语句先于监视的增删改,我们就有机会判断,修改即将发生的操作;

  • 相关阅读:
    C++ 对象模型学习记录(2) 第3章 data语义学
    C++ 对象模型学习记录(1) 第2章 构造函数语义学
    C ++ 对象模型学习记录(4) function 语义学 (未完待续)
    C++ 对象模型学习记录(3) 第1章 关于对象(未完)
    设计模式复习 之 代理模式
    大数运算
    effective C ++ 学习笔记之 item 31 将文件间的编译依赖关系降至最低(未完成)
    Java 复习 之1 多线程
    SQL中char varchar nchar nvarchar ntext区别和使用(资料汇总)
    .Net中的加密解密
  • 原文地址:https://www.cnblogs.com/LUO77/p/5820179.html
Copyright © 2011-2022 走看看