目录
视图
是从一个或者几个基本表(或视图)导出的表,它与基本表不同,是一个虚表
视图只能用来查询,不能做增删改(虚拟表)
创建视图 :
create view 视图名【view_xxx / v_xxx】
as 查询语句
create view v_stu_man as select * from student where ssex='男';
视图的使用
select * from v_stu_man;
查看库中 所有 的视图
select * from information_schema.VIEWS WHERE table_schema = 'myshool';
删除视图
drop view v_stu_man;
视图的作用:
- 简化查询
- 重写格式化数据
- 频繁访问数据库
- 过滤数据
存储过程:
本质上是一个函数
为什么使用存储过程?
业务流程复杂:业务复杂时,SQL语句相互依赖,顺序执行
频繁访问数据库:每条SQL语句都需单独连接和访问数据库;
先编译后执行:SQL语句的执行需要先编译。
什么是存储过程?
存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后,再次调用不需要重复编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
存储过程的创建
create procedure 存储过程的名字【proc_xxx】(形参列表)
BEGIN
一组sql语句集
END
创建一个最简单的存储过程
delimiter $$ -- 定制定界符
create procedure proc_test()
begin
select * from student;
end $$
delimiter ; -- 恢复默认的定界符
使用存储过程
call proc_test();
删除存储过程
drop procedure proc_stuPage;
带参的存储过程
存储过程的缺陷
维护性:存储过程的维护成本高,修改挑选调试较为麻烦
移植性:大多数关系行数据库的存储过程存在细微差异
协作性没有相关的版本控制或者IDE,团队中对于存储过程的使用大多是依赖文档
存储过程和函数的区别
• 关键字不同;
• 执行和调用方式不同;
• 返回值不同;
• 功能不同。
面试题
分页
触发器
什么是触发器?
触发器是数据库中针对数据库表操作触发的特殊的存储过程。
创建触发器
delimiter $$
create trigger 触发器名【trig_xxx】
before/after insert/ update/ delete
on 表名 for each row
begin
触发后执行的一组sql语句
end $$
delimiter ;
主要针对表的增删改操作,可单独指定,也可全部指定。
例子:
删除学生sid为1,在此之前把学生的成绩删除
(触发器先执行,再执行sql语句)
查看触发器
SELECT * FROM information_schema.`TRIGGERS`
WHERE trigger_schema = 'myshool';
删除触发器
DROP TRIGGER trig_delstu_delsc;
存储过程和触发器的区别:
语法:关键字不同,存储过程是procedure,触发器是trigger;
执行:存储过程需要调用才执行,触发器自动执行;
返回值:存储过程可以定义返回值,但是触发器没有返回值;
功能:存储过程是一组特定功能的SQL语句,触发器则是SQL语
句前后执行,本身不影响原功能。