概念
存储过程和函数定义:
类似于java中的方法。
一组预先编写好的SQL语句的集合,理解成批处理语句。
好处:
提高代码的重用性;简化操作;减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率
语法
create procedure 存储过程名(参数列表)
begin
存储过程体(一组合法有效的SQL语句)
end
注意
参数模式 参数名 参数类型
案例:
in stuname varchar(20);
模式 | 说明 |
---|---|
in | 该参数可以作为输入,也就是该参数需要传入值(其中in可以省略) |
out | 该参数可以作为输出,也就是该参数可以作为返回值 |
inout | 该参数既可以作为输入又可以作为输出,也就是该参数既需要传入值,又可以返回值。 |
delimiter 结束标记
delimiter $
语法
call 存储过程名(实参列表);
举例说明
# 调用in模式的参数
call sp1('值');
# 调用out模式的参数
set @name;
call sp1(@name);
select @name;
# 调用inout模式的参数
set @name = 值;
call sp1(@name);
select @name;
案例
语法
drop procedure 存储过程名;
语法
show create procedure 存储过程名;
定义
一组预先编译好的SQL语句的集合,理解成批处理语句。
好处
提高代码的重用性。
简化操作。
减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率。
存储过程与函数区别
区别 | 存储过程 | 函数 |
---|---|---|
返回值 | 个数可以是0个或者多个 | 有且仅有一个 |
操作 | 适合批量插入、批量更新 | 适合做处理后返回一个结果 |
语法
create function 函数名(参数名 参数类型) returns 返回类型
begin
函数体
end
注意
语法
select 函数名(参数列表);
语法
show create function 函数名;
语法
drop function 函数名;
含义:虚拟表,和普通表一样使用。
mysql5.1版本出现的新特性,它的数据来自于表,通过执行时动态生成。比如:普通班级和舞蹈班级的例子。
行和列的数据来自定义属性的查询中使用的表,并且是在使用视图时动态生成的。
只保存了sql逻辑,不保存查询结果。
应用
多个地方用到同样的查询结果。
该查询结果使用的sql语句较复杂。
好处
简化sql语句;
提高了sql语句的重用性;
保护基表的数据,提高了安全性;
语法
create view 视图名
as
查询语句;
视图的使用 就是把其当作表来使用就可以了;
语法1
create or replace view 视图名
as
查询语句;
语法2
alter view 视图名
as
查询语句;
drop view 视图1,视图2....
# 方式1
desc 视图名;
# 方式2
show create view 视图名;
插入
insert into 视图名 values();
update 视图名 set 属性 = 值;
delete from 视图名 where = 筛选条件;
均对原始数据表也进行了修改
视图的可更新性和视图中查询的定义有关系。
区别 | 视图 | 表 |
---|---|---|
语法 | create view | create table |
是否占用物理空间 | 只保存sql逻辑 | 保存数据 |
功能 | 查(一般不用增删改) | 增删改查 |
create table book(
bid int primary key,
bname varchar(20) unique not null,
price float default 10,
btypeId int,
foreign key(btypeId) references bookType(id)
)
2 开启事务,向表中插入一行数据
set autocommit = 0;
start transaction;
insert into book values(1,"java基础",45.26,5);
commit;
3 创建视图,实现查询价格大于100的书名和类型名
create or replace view vi1
as
select b.bname,bt.name
from book b
inner join bookType bt
on b.btypeId = bt.id
where b.price > 100;
4 修改视图,实现查询价格在90~120之间的书名和价格
create or replace view vi1
as
select bname,price
from book bo
inner join bookType bt on bo.btypeId = bt.id
where price between 90 and 120;
5 删除创建的视图
drop view vi1;