天津专业做网站,wordpress自动排版,网站制作公司 云南,购物网站开发教程中文一、视图
视图的定义、作用 视图是从一个或者几个基本表#xff08;或视图#xff09;导出的表。它与基本表不同#xff0c;是一个虚表。但是视图只能用来查看表#xff0c;不能做增删改查。 视图的作用#xff1a;①简化查询 ②重写格式化数据 ③频繁访问数据库 ④过…一、视图
视图的定义、作用 视图是从一个或者几个基本表或视图导出的表。它与基本表不同是一个虚表。但是视图只能用来查看表不能做增删改查。 视图的作用①简化查询 ②重写格式化数据 ③频繁访问数据库 ④过滤数据 创建视图 语法create view 视图名【view_xxx/v_xxx】as 查询语句
create view v_stu_man as
SELECT * from student where ssex男
使用视图 语法SELECT * FROM 视图名
SELECT * FROM v_stu_man
结果 案例1查看男同学的信息和班级
create view v_stuman_class as
select v_stu_man.*,classname from v_stu_man
left join class on v_stu_man.classidclass.classid
结果 注意student 表改变视图会跟着一起改变
UPDATE student SET sname赵蕾蕾 WHERE sid1 表中数据已改 查看视图中的信息
SELECT * FROM v_stu_man 结果 查看库中所有视图
SELECT * from information_schema.views
where table_schemamyschool
结果 删除视图
drop VIEW v_stu_man
二、存储过程
存储过程的定义 存储过程Stored Procedure是在大型数据库系统中一组为了完成特定功能的SQL 语句集存储在数据库中经过第一次编译后再次调用不需要重复编译用户通过指定存储过程的名字并给出参数 (如果该存储过程带有参数来执行它。 创建存储过程
语法
CREATE PROCEDURE 存储过程名【proc_xxx】(形参列表) BEGIN 一组SQL语句集 END
案例
案例1创建最简单的存储过程
delimiter $$定制定界符delimiter ;;恢复默认定界符
delimiter $$
create procedure proc_test()
beginselect * from student;
end $$
delimiter ;
-- 使用存储过程
CALL proc_test();
结果 案例2创建带参的存储过程
delimiter $$
create PROCEDURE proc_test2(in a int, -- 只入参out b int, -- 只出参inout c int -- 出入参
)
beginset aa1;set b b100;set c c1000;
end $$
delimiter ;#设置环境变量局部环境变量 全局环境变量
set x10;
set y 20;
set z 30;select x, y, z;-- 运行结果为图1
-- 使用存储过程
call proc_test2(x,y,z)select x, y, z;
-- 运行结果为图2
结果1 结果2 为什么使用了存储过程后会得到这样的结果呢 因为在我们定义形参a、b、c时前面给他们加了修饰符:in、out、inout。所以a是只入参数即只能将参数传入而不参与运算,所以a为10。b是只出参即无法给它传入值所以它为Null。c是出入参即既可以将参数传入也可以参与运算输出所以c为1030。
案例3使用存储过程达到分页效果
delimiter $$
create procedure proc_stuPage(in curpage int,in sizepage int,-- 学生数out stucount int,-- 页数out pagecount int
)
begin #declare:声明局部变量declare cp int;set cp(curpage-1)*sizepage;-- 把表中的值存入int类型的变量(此表只能有一条数据)select count(*) from student into stucount;set pagecountceiling(stucount / sizepage);select * from student limit cp,sizepage;
end $$
delimiter ;
set a 0; -- stucount
set b 0; -- pagecount
call proc_stuPage(2,3,a,b); -- 结果1-- 查看学生数和页数
select a,b -- 结果2
结果1 结果2 存储过程与函数的区别
语法关键字不同存储过程是procedure 函数是function
执行存储过程可以独立执行函数必须依赖表达式的调用
返回值存储过程可以定义多个返回结果 函数只有一个返回值
功能函数不易做复杂的业务逻辑但是存储过程可以。
存储过程的缺陷
维护性存储过程的维护成本高修改调试较为麻烦。
移植性大多数关系型数据库的存储过程存在细微差异
协作性没有相关的版本控制或者IDE团队中对于存储过程的使用大多是依赖文档。
三、触发器
触发器定义 触发器是数据库中针对数据库表操作触发的 特殊的存储过程。
创建触发器
语法
delimiter $$ CREATE TRIGGER 触发器名【trig_xxx】 BEFORE/AFTER -- 执行顺序 INSERT/UPDATE/DELETE -- 触发事件 ON 表名
案例
案例1删除学生 sid 为 1 在此之前把学生成绩删除
-- 创建触发器
delimiter $$
create trigger trig_delstu_delsc
before delete on student for each row
begindelete from sc where sid old.sid;
end $$
delimiter ;-- 触发事件
DELETE FROM student WHERE sid1;-- 查看学生表
select * from student;
-- 查看成绩表
select * from sc;
学生表结果 成绩表结果 查看所有触发器
SELECT * FROM information_schema.TRIGGERS
WHERE trigger_schema myschool
结果 删除触发器
DROP TRIGGER trig_delstu_delsc
删除后查看所有触发器 存储过程和触发器的区别
语法关键字不同存储 过程是procedure 触发器是trigger
执行存储过程需要调用才执 行触发器自动执行
返回值存储过程可以定义返回值 但是触发器没有返回值
功能存储过程是一组特定功能的 SQL语句触发器则是SQL语 句前后执行本身不影响原功 能。