当前位置:网站首页>MySQL数据库(五)视 图 、 存 储 过 程 和 触 发 器
MySQL数据库(五)视 图 、 存 储 过 程 和 触 发 器
2022-07-06 09:25:00 【手可摘鑫晨】
1,视图
概念:视图是从一个或几个表中所导出的虚表
语法:create view view_name as select...
说明:
view_name:自己定义的视图名
as:后面是这个视图说用到的查询结果
# 视图
-- 创建视图
-- CREATE VIEW 试图名 AS 查询sql语句;
CREATE VIEW v_stu_class1 AS SELECT * FROM student WHERE classid =1;
-- 使用试图
SELECT * FROM v_stu_class1;
2,视图的操作
(1)视图的查询
查询所有的视图:select * from 视图名 where 数据库名;
查看刚刚建立的视图:show create view 视图名
(2)删除储存过程:drop view 视图名
-- 查看所有视图
SELECT * FROM information_schema.VIEWS WHERE TABLE_SCHEMA = 'day002';
-- 查看视图名称
SHOW CREATE VIEW v_stu_class1;
CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost`
SQL SECURITY DEFINER VIEW `v_stu_class1` AS
select `student`.`Sid` AS `Sid`,
`student`.`Sname` AS `Sname`,
`student`.`birthday` AS `birthday`,
`student`.`Ssex` AS `Ssex`,
`student`.`classid` AS `classid`
from `student` where (`student`.`classid` = 1)
-- 创建视图
CREATE VIEW v_vstu_class AS SELECT v_stu_class1.*,classname FROM v_stu_class1 LEFT JOIN class ON v_stu_class1.classid = class.classid;
-- 使用视图
SELECT * FROM v_vstu_class;
-- 删除一个试图
DROP VIEW v_stu_class1;
3,视图的作用
(1)简化查询
(2)重写格式化数据
(3)频繁访问数据库
(4)过滤数据
4,储存过程的作用:
(1)业务流复杂:业务复杂时,SQL语句相互依赖,顺序执行。
(2)频繁访问数据库:每条SQL语句都需要单独连接和访问数据库
(3)先编译后执行:SQL语句的执行需要先编译
语法:
create procedure (
[[in 或 out 或 inout] 参数名 参数类型...] );
begin
declare 变量 变量类型
end
5,储存过程的操作
(1)调用储存过程 call 储存过程名 [参数名]
(2)查看储存过程 select * from 储存过程名 where 数据库名
(3)删除储存过程 drop procedure 储存过程名
# 储存过程
-- 定界符
-- delimiter $$
-- CREATE PROCEDURE 储存过程名(形参列表)
-- BEGIN
-- sql 语句集; 分号说明每条sql语句的结束 失效
-- END $$
-- delimiter
-- {
-- }
-- 创建存储过程
delimiter $$
CREATE PROCEDURE proc_stu()
BEGIN
SELECT * FROM student;
END $$
delimiter;
-- 使用存储过程
CALL proc_stu();
-- 有参储存过程
-- 创建有参过程
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+10;
SET z = z+100;
END $$
delimiter ;
-- @xx环境变量 @@xx 全局变量
SET @a = 10;
SET @b = 20;
SET @c = 30;
SELECT @a,@b,@c;
CALL proc_test(@a,@b,@c);
-- 案例分页
delimiter $$
CREATE PROCEDURE proc_stu_page(
IN curpage INT,
IN sizepage INT,
OUT sumcount INT,
OUT sumpage INT
)
BEGIN
-- 定义一个变量
DECLARE x INT;
SET x = (curpage-1) * sizepage;
SELECT COUNT(*) FROM student INTO sumcount;
SET sumpage = ceiling(sumcount / sizepage);
SELECT * FROM student LIMIT x,sizepage;
END $$
delimiter;
SET @a = 1;
SET @b = 3;
SET @c = 0;
SET @d = 0;
SELECT @a,@b,@c,@d;
CALL proc_stu_page(@a,@b,@c,@d)
6,储存过程与函数的区别
储存过程 | 函数 | |
---|---|---|
语法 | 关键字:procedure | 关键字:function |
执行 | 可以独立执行 | 必须依赖函数表达式的调用 |
返回值 | 可以定义多个返回值 | 只能有一个返回值 |
功能 | 可以做复杂的业务逻辑 | 不易做复杂的业务逻辑 |
7,储存过程的缺陷
(1)移植性:大多数关系型数据库的储存过程存在的细微差异。
(2)维护性:储存过程的维护成本高,修改调试较为麻烦。
(3)协作性:没有相关的版本控制或者IDE,团队中对于存储过程的使用大多是依赖文档。
8,触发器
概念:触发器是数据库中针对数据库表操作触发的特殊的存储过程。是一种自动执行切与表相关联的储存过程。
语法:
create trigger 数据库.触发器
before/after -- 触发顺序
insert/update/delete -- 触发事件
on each bow
begin
触发器内容 -- 事件出发后要写的语句
end $$
# 触发器
delimiter $$
CREATE TRIGGER 触发器名称
执行顺序 事件 ON 表名 FOR EACH ROW
BEGIN
触发的语句
END $$
delimiter;
BEFORE 事件 ON student;
删除一个学生 删除成绩成绩 sid
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;
-- 删除语句
DELETE FROM student WHERE sname = '赵雷';
select * from student;
select * from sc;
-- 查看库中的触发器
SELECT * FROM information_schema.`TRIGGERS`
WHERE trigger_schema = 'myschool';
-- 查看触发器的sql语句
show create trigger trig_delstu_delsc;
-- 删除触发器
drop trigger trig_delstu_delsc;
9,储存过程和触发器的区别
储存过程 | 触发器 | |
---|---|---|
语法 | 关键字:procedure | 关键字:trigger |
执行 | 需要调用才执行 | 自动执行 |
返回值 | 可以定义返回值 | 没有返回值 |
功能 | 是一组特定的SQL语句 | 在SQL语句前后执行 |
边栏推荐
- 刷视频的功夫,不如看看这些面试题你掌握了没有,慢慢积累月入过万不是梦。
- 数字电路基础(三)编码器和译码器
- C language do while loop classic Level 2 questions
- Public key box
- Statistics 8th Edition Jia Junping Chapter 4 Summary and after class exercise answers
- 王爽汇编语言学习详细笔记一:基础知识
- 数字电路基础(五)算术运算电路
- Cc36 different subsequences
- Global and Chinese market for antiviral coatings 2022-2028: Research Report on technology, participants, trends, market size and share
- How to use Moment. JS to check whether the current time is between 2 times
猜你喜欢
UCORE lab1 system software startup process experimental report
Login the system in the background, connect the database with JDBC, and do small case exercises
Maximum nesting depth of parentheses in leetcode simple questions
Build your own application based on Google's open source tensorflow object detection API video object recognition system (II)
How to transform functional testing into automated testing?
数字电路基础(三)编码器和译码器
Database monitoring SQL execution
HackTheBox-Emdee five for life
Dlib detects blink times based on video stream
China's county life record: go upstairs to the Internet, go downstairs' code the Great Wall '
随机推荐
STC-B学习板蜂鸣器播放音乐2.0
Four methods of exchanging the values of a and B
C language do while loop classic Level 2 questions
Video scrolling subtitle addition, easy to make with this technique
[pointer] find the largest string
Fundamentals of digital circuit (V) arithmetic operation circuit
STC-B学习板蜂鸣器播放音乐
Sleep quality today 81 points
数字电路基础(二)逻辑代数
Function: find 1-1/2+1/3-1/4+1/5-1/6+1/7-... +1/n
自动化测试你必须要弄懂的问题,精品总结
The latest query tracks the express logistics and analyzes the method of delivery timeliness
Global and Chinese markets for complex programmable logic devices 2022-2028: Research Report on technology, participants, trends, market size and share
Global and Chinese market of goat milk powder 2022-2028: Research Report on technology, participants, trends, market size and share
Function: find the maximum common divisor and the minimum common multiple of two positive numbers
基于485总线的评分系统双机实验报告
Fundamentals of digital circuits (II) logic algebra
150 common interview questions for software testing in large factories. Serious thinking is very valuable for your interview
The minimum sum of the last four digits of the split digit of leetcode simple problem
Functions: Finding Roots of equations