视图是从一个或者几个基本表(或视图)导出的表。它与基本表不同,是一个虚表。
1.视图不能做增删改,只能用来查询
2.使用的时候每次都会获取到最新的数据
3.不允许有重复的字段名
4.视图兼容性差,不能和数据库一起转储
1.简化查询
2.重写格式化数据
3.频繁访问数据库
4.过滤数据
create view 视图名【view_xxx\v_xxx】 as 查询语句
create view v_stu_man as select * from student where ssex = '男';
select * from v_stu_man;
drop view v_stu_man
特征:
1.是一种特殊的函数
2.可以有多个返回结果
1.业务流程复杂:业务复杂时,SQL语句相互依赖,顺序执行;
2.频繁访问数据库:每条SQL语句都需单独连接和访问数据库;
3.先编译后执行:SQL语句的执行需要先编译。
存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后,再次调用不需要重复编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
1.移植性:大多数关系型数据库的存储过程存在细微差异。
2.维护性:存储过程的维护成本高,修改调试较为麻烦。
3.协作性:没有相关的版本控制或者IDE,团队中对于存储过程的使用大多是依赖文档。
CREATE PROCEDURE 存储过程名【proc_xxx】 (形参列表)
BEGIN
DECLARE 变量 变量类型
END
1.创建一个最简单的存储过程
delimiter $$ -- 定制定界符
create procedure proc_stu()
begin
select * from student;
end $$
delimiter ; -- 恢复默认定界符
call proc_stu();
2.带参的存储过程
delimiter $$
create procedure proc_test(
in x int, -- in 只入参
out y int, -- out 只出参
inout z int -- inout 出入参
)
begin
set x = x+1;
set y = y+100;
set z = z+1000;
end $$
delimiter ;
set @a = 1; -- 2
set @b = 2; -- 102 2
set @c = 3; -- 1003* 3
call proc_test(@a,@b,@c);
drop procedure proc_test;
delimiter $$
create procedure proc_stupage(
in curpage int,
in sizepage int,
out sumcount int,
out sumpage int
)
begin
DECLARE cp int; -- 定义变量
set cp = (curpage - 1)*sizepage;
-- 总个数
-- into一个数据付给变量
select count(*) from student into sumcount;
-- 总页数
set sumpage = ceiling(sumcount/sizepage);
select * from student limit cp,sizepage;
end $$
delimiter ;
set @a = 2;
set @b = 3;
set @m = 0;
set @n = 0;
call proc_stupage(@a,@b,@m,@n);
select @m,@n;
触发器是数据库中针对数据库表操作触发的特殊的存储过程
特征: 隐式执行
CREATE TRIGGER 触发器名【trig_xxx】
BEFORE/AFTER – 触发顺序
INSERT/UPDATE/DELETE – 触发事件
ON 数据库.表名 – 事件表
FOR EACH ROW
BEGIN
触发器内容 – 事件出发后要写的语句
END$$
delete from student where sid = 2;
select * from student;
select * from sc;
delimiter $$
create trigger trig_delstu_delsc
before delete on student for each row
BEGIN
-- old 已经存在的数据 new 还不存在
delete from sc where sid = old.sid;
END $$
delimiter ;
1.语法:关键字不同,存储过程是procedure,触发器是trigger;
2.执行:存储过程需要调用才执行,触发器自动执行;
3.返回值:存储过程可以定义返回值,但是触发器没有返回值;
4.功能:存储过程是一组特定功能的SQL语句,触发器则是SQL语句前后执行,本身不影响原功能。