MySQL-视图、存储过程和触发器

一、视图的定义和使用 

        视图是从一个或者几个基本表(或视图)导出的表。它与基本表不同,是一个虚表,视图只能用来查询。不能做增删改查(虚拟的表)

1.视图的作用

  1. 简化查询
  2. 重写格式化数据
  3. 频繁访问数据库
  4. 过滤数据
2.创建视图

-- 创建视图
-- 语法:create view 视图名 【view_xxx / v_xxx】
-- as 查询语句


CREATE VIEW v_stu_man AS
SELECT * FROM student WHERE ssex = '男';
3.视图的使用
-- 视图的使用
SELECT * FROM v_stu_man;

运用:

//创建一个新视图
CREATE VIEW v_vstuman_class AS
SELECT v_stu_man.*,classname FROM v_stu_man
LEFT JOIN class ON v_stu_man.classid = class.classid
//使用这个视图
SELECT * FROM v_vstuman_class

若修改表中的Sid = 1的Sname='赵蕾蕾',查看数据显示结果

UPDATE student SET sname = '赵蕾蕾' WHERE sid = 1

4.查看库中所有的视图
-- 查看库中所有的视图
SELECT * FROM
information_schema.VIEWS 
WHERE table_schema = 'schoolp';

5.删除视图 
-- 删除视图
DROP VIEW v_stu_man;

二、存储过程的创建和使用

1.什么是存储过程

        存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后,再次调用不需要重复编译,用户通过指定存储过程的名字并给出参数 (如果该存储过程带有参数)来执行它。

简单来讲就是:SQL语句集+预编译+特定功能

2.为什么要使用存储过程
  1. 业务流程复杂:业务复杂时,SQL语句相互依赖, 顺序执行;
  2. 频繁访问数据库:每条SQL语句都需单独连接和访 问数据库;
  3. 先编译后执行:SQL语句的执行需要先编译。
3.创建存储过程

语法:# 存储过程
-- create procedure 存储过程名字【proc_xxx】(形参列表)
-- begin
--     一组sql语句集
-- end

-- 创建最简单存储过程
DELIMITER $$
CREATE PROCEDURE proc_test()
BEGINSELECT * FROM student;
END  $$
DELIMITER;
4.存储过程的操作
调用存储过程CALL 存储过程名 [参数名]
查看存储过程SELECT * FROM information_schema.ROUTINES WHERE routine_schema=‘库名’
删除存储过程DROP PROCEDURE 存储过程名;
-- 存储过程的基本用法
DELIMITER $$ -- 定制定界符
creat PROCEDURE pro_showstudent()
BEGINSELECTstudent.Sname,student.birthday,student.classid,student.Sid,student.Ssex
FROM student 
LEFT JOIN sc  ON student.Sid = sc.Sid
LEFT JOIN course ON course.Cid = sc.Cid
END$$
DELIMITER ; -- 恢复默认的定界符
CALL pro_showstudent();
-- 带参数的存储过程
DELIMITER $$
CREATE PROCEDURE proc_test2(IN a INT,   -- in 只入参(值传递)OUT b INT,  -- out 只出参 (无)INOUT c INT -- inout 出入参 (引用传递)
)
BEGIN SET a = a+1;SET b = b+100;SET c = c+1000;
END $$
DELIMITER ;-- 环境变量  @ 局部环境变量  @@ 全局环境变量
SET @X = 10;   
SET @Y = 20;     
SET @z = 30;      SELECT @X, @Y, @z;CALL proc_test2(@X,@Y,@z)SELECT @X, @Y, @z;

(面试题)写一个分页的存储过程

DELIMITER $$
CREATE PROCEDURE proc_stuPage(IN curpage INT,-- IN sizepage INT,OUT stucount INT,OUT pagecount INT
)
BEGIN DECLARE cp INT;-- 声名和定义局部变量的语句SET cp = (curpage-1)*sizepage;SELECT COUNT(*) FROM student INTO stucount;SET pagecount = CEILING(stucount / sizepage); -- ceiling 向上取整SELECT * FROM student LIMIT (curpage-1)*sizepage;,sizepage;
END $$
DELIMITER ;SET @a = 0;
SET @b = 0;
CALL proc_stuPage(2,3,@a,@b);SELECT @a,@b

5.存储过程与函数的区别
语法关键字不同,存储过程是procedure, 函数是function;
执行存储过程可以独立执行,函数必须依 赖表达式的调用;
返回值存储过程可以定义多个返回结果, 函数只有一个返回值;
功能函数不易做复杂的业务逻辑,但是存 储过程可以。
6.存储过程的缺陷
维护性存储过程的维护成本高,修改调试较为麻烦。
移植性大多数关系型数据库的存储过程存在细微差异。
协作性没有相关的版本控制或者IDE,团 队中对于存储过程的使用大多是 依赖文档。

三、触发器

1.什么是触发器

.

一种存储过程与表相关联自动执行
 触发器是数据库中针对数据库表操作触发的 特殊的存储过程。
2.创建触发器
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 ;
3.触发器的查看
SELECT * FROM information_schema.`TRIGGERS`
WHERE trigger_schema = 'schoolp'

四、存储过程和触发器的区别

语法关键字不同,存储 过程是procedure, 触发器是trigger;
执行存储过程需要调用才执 行,触发器自动执行;
返回值存储过程可以定义返回值, 但是触发器没有返回值;
功能存储过程是一组特定功能的 SQL语句,触发器则是SQL语 句前后执行,本身不影响原功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/50957.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MATLAB APP】建立独立桌面APP

背景:已有MATLAB APP的.mlapp文件,但客户提出需要可以直接使用的exe文件。 要求:点开即用,无需下载MATLAB。使用者无法修改APP的代码。 一、环境配置 APP创建者:安装MATLAB R2023a,配置Application Compile…

创建vue3项目,以及使用示例

1.在根目录下cmd:vue create myobj(没有切换淘宝镜像记得切换,这样创建项目运行快) 2. 3.(按空格键选中,选好回撤就到下一步了) 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.然后输入执行以下两步就已经运行项目了 以…

Linux云计算 |【第二阶段】AUTOMATION-DAY4

主要内容: 部署Ansible、Ansible基础命令(Ansible ad-hoc命令格式、Ansible-doc帮助)、Ansible模块常用:脚本与命令模块、文件与账户模块、软件与服务模块、逻辑卷模块 补充:touch 除创建文件外,若再创建相…

vue3知识

目录 基础vue开发前的准备vue项目目录结构模板语法属性绑定条件渲染列表渲染通过key管理状态事件处理事件传参事件修饰符数组变化侦测计算属性Class绑定style绑定侦听器表单输入绑定模板引用组件组成组件嵌套关系组件注册方式组件传递数据Props(父传子)组件传递多种数据类型组件…

SpringBoot 数据访问操作

目录 一.SpringBoot整合Mybatis与Mybatis-Plus 二.SpringBoot切换druid数据源 3.1DRUID配置参数 3.2Druid监控平台 一.SpringBoot整合Mybatis与Mybatis-Plus 步骤&#xff1a; 1.坐标 <dependency><groupId>com.baomidou</groupId><artifactId>myb…

Android ConstraintLayout 约束布局

目录 1&#xff09;ConstraintLayout 约束布局是什么&#xff1f;为什么使用&#xff1f; 2&#xff09;如何使用 3&#xff09;可见性改变后的行为处理 4&#xff09;图形化界面的一些工具介绍 5&#xff09;Chains ( 链 ) 一、ConstraintLayout 约束布局是什么 Constraint…

【无人机】测绘行业新时代

【无人机】测绘行业新时代 无人机测绘主要指的是依托无人机系统为主要的信息接收平台&#xff0c;通过无人机机载遥感信息采集和处理设备&#xff0c;将最终所获取的遥感信息传输到测绘中心&#xff0c;经过数据技术处理&#xff0c;形成立体化的数字模型&#xff0c;以满足行…

JavaScript 输出

JavaScript 不提供任何内建的打印或显示函数。 JavaScript 显示方案 JavaScript 能够以不同方式“显示”数据&#xff1a; 使用 window.alert() 写入警告框使用 document.write() 写入 HTML 输出使用 innerHTML 写入 HTML 元素使用 console.log() 写入浏览器控制台 使用 in…

想要连接稳定的远程控软件吗?这4款软件不要错过

远程控制电脑是一种现代社会高效便捷的办公方式。这种方式可以不论时间不论地点都可以调用到办公电脑里的文件&#xff0c;如果你办公也有这个需求&#xff0c;那就看看我介绍的工具吧。 1.RL远程控制 直通车>>https://www.raylink.live 这个软件非常适合用来进行手机…

数据库安全综合治理方案(54页PPT)附下载

方案介绍&#xff1a; 数据库安全综合治理方案是一个综合性的策略&#xff0c;旨在确保数据库系统的完整性、保密性和可用性&#xff0c;防止未经授权的访问、数据泄露、篡改及滥用。该方案涉及多个层面&#xff0c;包括访问控制、数据加密、审计与监控、备份与恢复、以及安全…

Dreambooth on Stable Diffusion

Dreambooth on Stable Diffusion 1.DreamBooth: Fine Tuning Text-to-Image Diffusion Models for Subject-Driven Generation 2.[论文简析]DreamBooth: Fine Tuning Text-to-Image Diffusion Models…[2208.12242] 3.sd_dreambooth_extension 4.stable-dreambooth 对3-5张特定…

17.5【C语言】static的补充说明

static &#xff08;静态的) 作用&#xff1a;修饰局部变量&#xff0c;修饰全局变量&#xff0c;修饰函数 对比两段代码 #include <stdio.h> void test() {int a 5;a;printf("%d ", a); } int main() {int i 0;for(i0; i<5; i){test();}return 0; } …

HarmonyOS 质量、测试、上架速浏

1.应用质量要求&#xff1a; 1. 应用体验质量建议: 功能数据完备 功能完备 数据完备 基础体验要求 基础约束 兼容性 稳定性 性能 功耗 安全…

网格布局 HTML CSS grid layout demo

文章目录 页面效果代码 (HTML CSS)参考 页面效果 代码 (HTML CSS) <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"…

高速传输新体验:探索最新USB-C移动硬盘盒的无限可能

在数字化时代&#xff0c;数据存储的重要性不言而喻&#xff0c;而硬盘盒作为连接外部硬盘与计算机的关键设备&#xff0c;其功能也在不断进化。近年来&#xff0c;随着技术的创新与发展&#xff0c;市场上出现了一种新型硬盘盒——它不仅能安全、高效地存储和传输数据&#xf…

安装VMware Workstation Pro

一、下载 通过百度网盘分享的文件&#xff1a;VMware-workstation-full-16.2.4-2008... 链接&#xff1a;https://pan.baidu.com/s/1mDnFhLQErBlpeX_KjsgtzA 提取码&#xff1a;0bw7 二、安装 &#xff08;1&#xff09;双击exe文件 &#xff08;2&#xff09;安装软件 &…

算法-bfs-八数码

题目一 解题思路 将每一串字符都想象成一个点&#xff0c;已知起点和终点,每一次更新相邻的节点&#xff0c;采用bfs得到到达终点的最短路径。 数据结构&#xff1a; unordered_map&#xff08;哈希表&#xff09;来存储每种字符串对应情况需要移动的次数。 queue(队列)存储…

刷题计划 day4 【双指针、快慢指针、环形链表】链表下

⚡刷题计划day4继续&#xff0c;可以点个免费的赞哦~ 下一期将会开启哈希表刷题专题&#xff0c;往期可看专栏&#xff0c;关注不迷路&#xff0c; 您的支持是我的最大动力&#x1f339;~ 目录 ⚡刷题计划day4继续&#xff0c;可以点个免费的赞哦~ 下一期将会开启哈希表刷题…

vuex学习day01-vuex简述、基于脚手架创建项目、基于脚手架创建项目

1、vuex简述 之所以采用vuex是因为当我们有多个公共状态的组件时&#xff0c;vue的简单性容易崩溃 &#xff08;1&#xff09;概念 Vuex 是Vue.js 应用程序的状态管理模式库。简单讲&#xff0c;vuex是vue的一个状态管理工具。 &#xff08;2&#xff09;作用 管理vue中的…

w30-python02-pytest入门

代码如下&#xff1a; import pytest class Test_Obj:"""测试类"""#用例级别前后置def setup(self):print(用例级别------的前置处理)def teardown(self):print("用例级别--------的后置处理")# 用例def test_case1(self):print(&quo…