美文网首页
7、Mysql视图和触发器

7、Mysql视图和触发器

作者: go以恒 | 来源:发表于2018-09-26 11:34 被阅读0次

    视图

    视图是一个虚拟表(非真实存在),其本质是【根据SQL语句获取动态的数据集,并为其命名】,用户使用时只需使用【名称】即可获取结果集,并可以将其当作表来使用。

    • 临时表搜索
    SELECT
            *
        FROM
            (
                SELECT
                    nid,
                    NAME
                FROM
                    tb1
                WHERE
                    nid > 2
            ) AS A
        WHERE
            A. NAME = 'alex';
    

    1、创建视图

    • 格式:CREATE VIEW 视图名称 AS SQL语句
    CREATE VIEW v1 AS 
        SELET nid, 
            name
        FROM
            A
        WHERE
            nid > 4
    

    2、删除视图

    • 格式:DROP VIEW 视图名称
    DROP VIEW v1
    

    3、修改视图

    • 格式:ALTER VIEW 视图名称 AS SQL语句
    ALTER VIEW v1 AS
        SELET A.nid,
            B. NAME
        FROM
            A
        LEFT JOIN B ON A.id = B.nid
        LEFT JOIN C ON A.id = C.nid
        WHERE
            A.id > 2
        AND C.nid < 5
    

    4、使用视图

    使用视图时,将其当作表进行操作即可,由于视图是虚拟表,所以无法使用其对真实表进行创建、更新和删除操作,仅能做查询用。

    select * from v1
    

    触发器

    对某个表进行【增/删/改】操作的前后如果希望触发某个特定的行为时,可以使用触发器,触发器用于定制用户对表的行进行【增/删/改】前后的行为。

    1、创建基本语法

    • 插入前
    CREATE TRIGGER tri_before_insert_tb1 BEFORE INSERT ON tb1 FOR EACH ROW
    BEGIN
        ...
    END
    
    • 插入后
    CREATE TRIGGER tri_after_insert_tb1 AFTER INSERT ON tb1 FOR EACH ROW
    BEGIN
        ...
    END
    
    • 删除前
    CREATE TRIGGER tri_before_delete_tb1 BEFORE DELETE ON tb1 FOR EACH ROW
    BEGIN
        ...
    END
    
    • 删除后
    CREATE TRIGGER tri_after_delete_tb1 AFTER DELETE ON tb1 FOR EACH ROW
    BEGIN
        ...
    END
    
    • 更新前
    CREATE TRIGGER tri_before_update_tb1 BEFORE UPDATE ON tb1 FOR EACH ROW
    BEGIN
        ...
    END
    
    • 更新后
    CREATE TRIGGER tri_after_update_tb1 AFTER UPDATE ON tb1 FOR EACH ROW
    BEGIN
        ...
    END
    
    • 插入前触发器
    delimiter //
    CREATE TRIGGER tri_before_insert_tb1 BEFORE INSERT ON tb1 FOR EACH ROW
    BEGIN
    
    IF NEW. NAME == 'alex' THEN
        INSERT INTO tb2 (NAME)
    VALUES
        ('aa')
    END
    END//
    delimiter ;
    
    • 插入后触发器
    delimiter //
    CREATE TRIGGER tri_after_insert_tb1 AFTER INSERT ON tb1 FOR EACH ROW
    BEGIN
        IF NEW. num = 666 THEN
            INSERT INTO tb2 (NAME)
            VALUES
                ('666'),
                ('666') ;
        ELSEIF NEW. num = 555 THEN
            INSERT INTO tb2 (NAME)
            VALUES
                ('555'),
                ('555') ;
        END IF;
    END//
    delimiter ;
    

    特别的:NEW表示即将插入的数据行,OLD表示即将删除的数据行。

    2、删除触发器

    DROP TRIGGER tri_after_insert_tb1;
    

    3、使用触发器

    触发器无法由用户直接调用,而知由于对表的【增/删/改】操作被动引发的。

    insert into tb1(num) values(666)

    相关文章

      网友评论

          本文标题:7、Mysql视图和触发器

          本文链接:https://www.haomeiwen.com/subject/qjedoftx.html