ykluo

导航

视图及存储过程

一、视图 VIEW

1、什么是视图?

 虚拟存在的表,不保存查询结果,只保存查询的sql逻辑

 简单、安全、数据独立

2、基本使用

# 创建视图
create or replace view user_view as select id ,name from user where id <=3;
# 查询视图
show create view user_view;
select * from  user_view;
# 修改视图
create or replace view user_view as select id ,name from user where id <=10;
alter view user_view as select id ,name from user where id <=3;
# 删除视图
drop view user_view;

二、存储过程 Procedure

1、什么是存储过程?通过一些定义并存储数据库中的一段sql语句的集合,来提高执行sql的执行效率、减少网络交互,封装重用   

***在服务器中执行时,使用delimiter指定sql的结束符

2、基本使用

if-else语法:
# 创建存储过程
create procedure score_result(in score int , out result varchar(10)) begin if score >= 85 then set result := '优秀'; elseif score >= 60 then set result := '及格'; else set result := '不及格'; end if; select concat('您输入的分数是;',score,',查询结果是:',result); end; # 调用存储过程 call score_result(89 ,@result); #查询结果 select @result; # 删除存储过程 drop procedure score_result;
# case语法:
#创建存储过程
create procedure month_case(in month int ,out result varchar(20))
begin
    case
        when month >=1 and month <=3 then
        set result := '第一季度';
        when month >=4 and month <=6 then
        set result := '第二季度';
        when month >7 and month <=9 then
        set result := '第三季度';
        when month >=10 and month <=12 then
        set result := '第四季度';
        else set result := '非法参数';
    end case;
    select concat('您输入的月份是;',month,',所在的季度是:',result);
end;
#调用存储过程
call month_case(3,@result)
# while语法 从1累加到n,n为传入的值
create procedure sum_while(in number int ,out snumber int)
begin
    set snumber := 0;
    while number > 0 do
        set snumber := snumber + number;
        set number := number - 1;
    end while;
    select concat('sum结果为:',snumber);
end;
#调用存储过程
call sum_while(10,@snumber);

# repeat语法 从1累加到n,n为传入的值
create procedure sum_repeat(in number int ,out snumber int)
begin
    set snumber := 0;
    repeat
        set snumber := snumber + number;
        set number := number - 1;
        until number <=0
    end repeat;
    select concat('sum结果为:',snumber);
end;
#调用存储过程
call sum_repeat(10,@snumber);


# loop语法 从1累加到n,n为传入的值
create procedure sum_loop(in number int ,out snumber int)
begin
    set snumber := 0;
    sum:loop
       if number <=0 then
           leave sum;
       end if;
#  iterate 跳过当前进入下一个循环
#        if number%2 = 1 then
#            set number := number -1 ;
#            iterate sum;
#        end if;

        set snumber := snumber + number;
        set number := number - 1;
    end loop sum;
    select concat('sum结果为:',snumber);
end;
#调用存储过程
call sum_loop(10,@snumber);

 

三、存储函数 Function

1、什么是存储函数?存储函数有返回值的存储过程,参数类型只能为in类型

 

四、触发器 Trigger

1、什么是触发器?可以在inset,update,delete之前、之后触发;保证数据完整性,日志记录,数据校验等。

 

五、数据库备份

mysqldump --single-transaction -uroot -p1234 库名 > 存放地址

 

练习:

1 200分转100分换算

create procedure score_convert(inout score double)
begin
    set score := score * 0.5;
    select concat('转换结果为:',score);
end;
# 赋值
set @score = 78;
# 调用
call score_convert(@score);
# 查询结果
select @score;
# 删除存储过程
drop procedure score_convert;

 

posted on 2022-06-15 11:29  武汉彭于晏  阅读(382)  评论(0编辑  收藏  举报