mysql之视图与函数

视图

视图也就是临时表,当相同的查询语句出现过多时就需要将其抽象成一张表。以简化sql语句,这时候就需要视图了,视图只保存sql逻辑。

创建视图

create view myview
as
查询语句

使用视图

select * from myview;

修改视图

alter view 视图名
as
查询语句

删除视图

drop view 视图名,视图名,...;

变量

全局变量

show global variables; #查看所有变量
show global variables like "%搜索值%"; #特定
select @@global.xxxx; #查看指定变量的值
set @@global.tx_isolation=0; #设置全局变量的值

会话变量

仅仅针对于当前连接有效
查看指定某个会话变量。

show session variables; #查看所有变量
show session variables like "%搜索值%"; #特定
select @@session.xxxxx; #查看指定变量的值
set @@session.tx_isolation=0; #设置全局变量的值

用户变量

在这里插入图片描述

局部变量

在这里插入图片描述

存储过程

存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。

优点

  • 提高代码的重用性
  • 简化操作
  • 减少与数据库服务器的连接次数,提高效率

缺点

  • 存储过程,往往定制化于特定的数据库上,因为支持的编程语言不同。当切换到其他厂商的数据库系统时,需要重写原有的存储过程。
  • 存储过程的性能调校与撰写,受限于各种数据库系统。

创建

create procedure sp_name([[IN |OUT |INOUT ] 参数名 数据类形...])
begin
 执行的sql语句1;
 执行的sql语句2;
end
  • IN 输入参数:表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值。
  • OUT 输出参数:该值可在存储过程内部被改变,并可返回。
  • INOUT 输入输出参数:调用时指定,并且可被改变和返回,参数名和sql语句中的字段名不能相同。

删除

drop procedure sp_name;

使用

call sp_name ([param])// 带参数
call sp_name[(param)] // 不带参数

查询

show procedure status
show create procedure sp_name

函数

创建

delimiter $$
create function myfun3(ia int, ib int) returns int
begin
    return ia + ib;
end
$$
delimiter ;

例子:

-- 求1 ~ 指定数之前的和,但5的倍数不加
delimiter $$
create function my_sum2(x int) returns int
begin
    declare i int default 1;
    declare sum int default 0;
    sumwhile:while i <= x do
        if i % 5 = 0 then
            set i = i + 1;
            iterate sumwhile;
        end if;
        set sum = sum + i;
        set i = i + 1;
    end while;
    return sum;
end
$$
delimiter ;

查看

show function status [like 'pattern'];

删除

drop function 函数名;

函数与存储过程的区别

  1. 函数只能返回一个变量,而存储过程可以返回多个。
  2. 函数的限制比较多,不能用临时表,只能用表变量,有些函数不能用,存储过程限制少。
  3. 存储过程处理的功能比较复杂,而函数实现的功能针对性强。
  4. 存储过程可以执行修改表的操作,但是函数不能执行一组修改全局数据库状态的操作。
  5. 存储过程可以返回参数,如记录集,函数只能返回值或者表对象。

触发器

建议少用,性能低下。

发布了23 篇原创文章 · 获赞 1 · 访问量 518

猜你喜欢

转载自blog.csdn.net/qq_38783257/article/details/103225997