视图及存储过程
一、视图 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;