对于多表联查,特别适合适用视图,简化那一长串的sql语句。
二、存储过程存储过程就是事先经过编译并存储在数据库中的一段SQL语句的集合,通过调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的网络传输,对于提高数据处理的效率是很有帮助的。说的简单点就是SQL语句的封装和重用。
存储过程的特点有: sql语句的封装和复用,其次是可以接收参数,也可以返回数据,减少网络交互,提升效率。
存储过程的操作语法:
create procedure 存储过程名称([参数列表])
begin
。。。SQL语句
end;
调用存储过程: call 名称([参数])
命令行创建存储过程需要通过delimiter指定结束符,mysql是以分号结束的。
delimiter // # 指定什么字符结束
create procedure p()
begin
select count(*) from king_user;
end//
mysql> delimiter @@
mysql> create procedure pk()
-> begin
-> select count(*) from king_user;
-> end@@
Query OK, 0 rows affected (0.00 sec)
mysql>
# 改回来 ,调用存储过程
mysql> delimiter ;
mysql> call pk();
----------
| count(*) |
----------
| 11 |
----------
1 row in set (0.01 sec)
Query OK, 0 rows affected (0.01 sec)
存储过程的查看和删除操作
SELECT * FROM information_schema.ROUTINES where ROUTINE_SCHEMA='test'
show create procedure pk;
drop procedure pk();
存储过程的系统变量和用户自定义变量。
系统变量是MySQL服务器提供的,不是用户定义的,属于服务器层面的,分为全局变量global和会话变量session。语法如下:
1、查看系统变量
show [session|global] variables; # 查看索引系统变量
show [session|global] variables like '...'; # 模糊匹配查找系统变量
select @@[session|global] 系统变量名; # 查看指定变量的值
2、设置系统变量
set [session|global] 系统变量名=值;
set @@[session|global] 系统变量名=值;
提示: 如果没有指定session或者global,默认是session,mysql服务重启后所有设置的全局参 数会失效,要想不失效必须在全局设置的同时把设置内容添加到/etc/my.cnf中。
用户自定义变量是用户根据需要自己定义的变量,用户变量不用提前声明,在用的时候直接使用"@变量名"使用就可以,其作用域为当前的连接。
赋值:
set @var_name = expr;
set @var_name := expr; # 推荐使用:=
select @var_name := expr;
select 字段名 into @var_name from 表名;
使用方法: select @var_name; 即可