美文网首页
SQL视图、触发器、存储过程

SQL视图、触发器、存储过程

作者: 莫问前程F6 | 来源:发表于2021-08-29 09:00 被阅读0次

    数据库视图

    数据库中一张虚拟的表,允许不同用户或者应用程序以不同方式查看同一张表中的数据。

    1. 创建视图
    create view view_tb as select id,name from user;
    
    1. 使用视图
    select * from view_tb;
    
    1. 删除视图
    drop view view_tb;
    

    4.视图的限制

    • 创建视图后,如上的user表发生变化时,view_tb 会相应发生联动。
    • 定义视图时不能使用order by子句
    • 通过聚合得到的视图无法更新

    触发器

    触发器定义了一系列操作,可以再对指定表进行插入,更新,删除的时候,自动执行这些操作,完成对目标表的管理

    1.创建触发器(插入: tab1插入一条新数据后,tab2会同步更新)

    create trigger t_afterinsert_on_tab1 
        after insert on tab1 
        for each row 
        begin
            insert into tab2(tab2_id) values(new.tab1_id);
        end
    

    2.创建触发器(删除:tab1删除一条数据后,tab2会同步更新)

    create trigger t_afterdelete_on_tab1 
        after insert on tab1 
        for each row 
        begin
            delete from tab2 where tab2_id = old.tab1_id;
        end
    

    3.删除触发器

    drop trigger t_afterinsert_on_tab1
    drop trigger t_afterdelete_on_tab1
    

    存储过程(Procedure)

    存储过程是一组为了完成特定功能的SQL语句的集合,存储在数据库中的,用户通过指定存储过程的名字和参数进行调用
    存储过程相当于定义在MySql中的方法,开发者可以直接调用。有以下优点

    • 只需要创建一次,就可以任意调用
    • 执行速度更快
    • 更好的安全机制
      参数:输入输出类型、参数名称、参数数据类型
      入参:java方法中的参数
      出参:java方法中的返回值

    1.创建存储过程(入参)

    create procedure add_name(in target int)
    begin
        declare name varchar(11);
        if  target = 1 then
            set name = 'Mysql';
            else
            set name = 'java';
        else if;
        insert into test(name) values(name);
    end;
    

    2.调用存储过程

    call add_name(2);
    

    5.删除存储过程

    drop procedure add_name;
    

    3.创建存储过程(出参)

    create procedure count_of_student(out count_num int)
    begin
        select count(*) into count_num from student;
    end;
    

    4.调用存储过程(出参)

    call count_of_student(@count_num);
    select @count_num
    

    相关文章

      网友评论

          本文标题:SQL视图、触发器、存储过程

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