目录

一、视图

二、存储过程

三、触发器


一、视图

视图是一种虚拟存在的表。视图中的数据并不在数据库中真实存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。通俗的讲,视图只保存了查询的SQL逻辑,不保存查询结果。所以我们在建立视图的时候,主要的工作就落在创建这条SQL查询语句上

创建或修改视图语句:

查看创建视图的语句:

show create view 视图名称;

查看视图:

select * from 视图名称;

删除视图:

drop view if exists 视图名称;

with check option:当使用with check option子句创建视图时,MySQL会通过视图检查正在更改的每个行,例如插入,更新,删除,以使其符合视图定义。MySQL允许基另一个视图创建视图,它还会检查依赖图中的规则保持一致性。为了确定检查的范围,mysql提供了两个选项:CASCADED和LOCAL,默认值为CASCADED。

CASCADED:v2视图是基于v1视图的,如果在v2视图创建的时候指定了检查选项为 cascaded,但是v1视图创建时未指定检查选项。 则在执行检查时,不仅会检查v2,还会级联检查v2的关联视图v1。

LOCAL:v2视图是基于v1视图的,如果在v2视图创建的时候指定了检查选项为 local ,但是v1视图创 建时未指定检查选项。 则在执行检查时,知会检查v2,不会检查v2的关联视图v1。

无法更新的视图:

作用:

1.视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视图,从而使用户不必以后操作每次指定全部条件

2.数据库可以授权,但不能授权到数据库特定行和特定的列上。通过视图用户只能查询和修改他们所能见到的数据

3.视图可帮助用户屏蔽真实表结构变化带来的影响

二、存储过程

存储过程是事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的

创建存储过程:

调用:

查询指定数据库的存储过程及状态信息:

select * from information_schema.ROUTINES where ROUTINE_SCHEMA=数据库名称;

查询存储过程定义:

show create procedure 存储过程名称;

删除:

drop procedure if exists 存储过程名称;

注意:在命令行中,执行创建存储过程的SQL时,需要通过关键字delimiter指定SQL语句的结束符

系统变量:是MySQL服务器提供,不是用户定义的,属于服务器层面。分为全局变量(GLOBAL)、会话变量(SESSION)

查看所有系统变量:

show global /session variables ;

通过like模糊匹配方式查找变量:

show global variables like 模糊匹配类型;

查看指定变量:

select @@global.autocommit;

设置系统变量:

set session autocommit=1;

注意:如果没有指定SESSION/GLOBAL,默认是SESSION,会话变量。mysql服务重新启动之后,所设置的全局参数会失效,想要不失效,可在/etc/my.cnf中配置

用户定义变量:是用户根据需要自己定义的变量,用户变量不用提前声明,在用的时候直接用“@ 变量名”使用就可以。其作用域为当前连接。

赋值:
 

set @name:='李天天';
select sn  into @sn_1 from tb_sku where id=1;

查找:

select @name;

注意:用户定义的变量无需对其进行声明或初始化,只不过获取到地值未NULL

局部变量:是根据需要定义的在局部失效的变量,访问之前,需要DECLARE声明。可用作存储过程内的局部变量和输入参数,局部变量的范围是在其内声明的BEGIN...END块

声明:

 declare total int default 0;

注意:变量类型就是数据库字段类型:INT、BIGINT、CHAR、VARCHAR、DATE、TIME等

赋值:

set total:=90;
 select sn  into total from tb_sku where id=1;

if:

create procedure p1()
begindeclare score int default 44;declare result char(10);if score>=80 thenset result:='优秀';elseif score>=60 thenset result:='良好';elseset result:='不及格';end if;select result;
end;

参数:

示例:

create procedure p2(in score int,out result char(10))
beginif score>=80 thenset result:='优秀';elseif score>=60 thenset result:='良好';elseset result:='不及格';end if;
end;

create procedure p3(inout score double)
beginset score:=score*0.5;
end;
set @result=89;
call p3(@result);
select @result;

case:

示例:

begindeclare season varchar(20);casewhen month >= 1 and month <= 3 then set season = '一季度';when month >= 4 and month <= 6 then set season = '二季度';when month >= 7 and month <= 9 then set season = '三季度';when month >= 10 and month <= 12 then set season = '四季度';else set season = '输入错误';end case;select concat('当前月份为:', month, ';当前季度为:', season);end;

while:

示例:

create procedure p2(in n int)
begindeclare total int default 0;while n > 0doset total := total + n;set n = n - 1;end while;select concat('累加值为:',total);
end;

repeat:

create procedure p3(in n int)
begindeclare total int default 0;repeatset total := total + n;set n = n - 1;until n <= 0end repeat;select concat('累加值为:', total);end;

loop:

loop实现简单的循环,如果不在SQL逻辑中增加退出循环条件,可以用其来实现简单的死循环。loop可以配合一下两个语句使用:

LEAVE:配合循环使用,退出循环

ITERATE:必须用在循环中,作用是跳过当前循环剩下的语句,直接进入下一次循环

create procedure p4(in n int)
begindeclare total int default 0;sum :loopif n <= 0 thenleave sum;end if;set total = total + n;set n = n - 1;end loop sum;select total;
end;
create procedure p6(in n int)
begindeclare total int default 0;sum :loopif n <= 0 thenleave sum;end if;if n % 2 = 1 thenset n = n - 1;iterate sum;elseset total = total + n;set n = n - 1;end if;end loop sum;select total;
end;

游标:

游标是用来存储查询结果集的数据类型,在存储过程和函数中可以使用游标对结果集进行循环的处理。游标的使用包括游标的声明、open、fetch和clode。

声明游标:

打开游标:

获取游标记录:

关闭游标:

条件处理程序:可以用来定义在流程控制结构执行过程中遇到问题时相应的处理步骤

mysql异常状态码文档

https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html

示例:

create procedure p7()
begindeclare new_name varchar(10) default null;declare new_no varchar(10) default null;declare student_name cursor for select no,name from student;declare exit  handler for SQLSTATE '02000' close student_name;open student_name;create table if not exists tb_sku_name_price_100(id   int primary key auto_increment,no  varchar(10),name varchar(10));while truedofetch student_name into new_no ,new_name ;insert into tb_sku_name_price_100 values (null,new_no,new_name);end while;close student_name;
end;

存储函数:

存储函数是有返回值的存储过程,存储函数的参数只能是IN类型

示例:

create function sun(n int)
returns int deterministic
begindeclare total int default 0;while n>0 doset total:=n+total;set n:=n-1;end while;return total;
end;

三、触发器

触发器是与表有关的数据库对象,指在insert/update/delete之前或之后,触发并执行触发器中定义的SQL语句集合。触发器的这种特性可以协同应用在数据库端确保数据的完整性,日志记录,数据校验等操作。

使用别名OLD和NEW来引用触发器中发生变化的记录内容,这与其他数据库是相似的。现在数据库还只支持行级触发,不支持语句触发。

创建:

查看:

删除:

insert:

create trigger tb_student_insert_triggerafter insert on student for each rowbegininsert into user_logs (operation, operate_time, operate_id, operate_params) values('insert',now(),new.id,concat('插入的数据内容为:','id为',new.id,'name为',new.name,'no为',NEW.no));end;

deleter:

create trigger tb_student_deleter_triggerafter delete on student for each row
begininsert into user_logs (operation, operate_time, operate_id, operate_params) values('deleter',now(),old.id,concat('删除的数据内容为:','id为',old.id,'name为',old.name,'no为',old.no));
end;

update:

create trigger tb_student_update_triggerafter update on student for each row
begininsert into user_logs (operation, operate_time, operate_id, operate_params) values('update',now(),old.id,concat('更新前数据内容为:','id为',old.id,'name为',old.name,'no为',old.no,'|','更新后的数据内容为:','id为',new.id,'name为',new.name,'no为',new.no));
end;

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

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

相关文章

iOS App 卡顿与性能瓶颈排查实战 如何定位CPU内存GPU帧率问题、优化耗电与网络延迟(uni-app开发性能优化全流程指南)

在 iOS 应用开发中&#xff0c;卡顿 是用户最直观的负面体验。 一个 App 如果在页面切换、滚动、后台运行时频繁掉帧或发热&#xff0c;用户很快就会放弃使用。 对于 uni-app 跨平台开发者 来说&#xff0c;卡顿问题更为复杂&#xff1a; JS 与原生层桥接增加了 CPU 负载&#…

腾讯开源多模态 RAG:复杂文档秒变自建知识库,支持 API 调用

上篇&#xff0c;分享了 小智AI MCP系列的第一篇&#xff1a; 小智 AI 闹钟提醒 定时任务&#xff0c;设备端MCP实现 有朋友问&#xff0c;能否接入知识库 RAG&#xff1f; 让小智可以根据企业知识库&#xff0c;回答客户的疑问~ 当然可以&#xff0c;接入方式同样是 MC…

Node.js中的 http 模块详解

http 模块是 Node.js 中的核心模块之一&#xff0c;专门用于构建基于 HTTP 的网络应用程序。它允许创建 HTTP 服务器和客户端&#xff0c;处理网络请求和响应。1. 核心 API 详解1.1. http.createServer([options][, requestListener])用于创建 HTTP 服务器的核心方法&#xff0…

LAMP 环境部署

LAMP 环境部署 一、概述 1. 目的 基于 CentOS 7 系统部署 LAMP&#xff08;Linux Apache MySQL PHP&#xff09;环境的完整步骤&#xff0c;通过脚本化操作实现环境快速搭建&#xff0c;适用于运维人员进行测试环境或基础生产环境的 LAMP 部署 2. 适用环境操作系统&#xff…

用html5仿造nes游戏敲玻璃写一个敲玻璃游戏

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>敲玻璃游戏</title><style>body {ma…

996引擎-ItemTips特效框层级自定义

996引擎-ItemTips特效框层级自定义 需求场景 ItemTips 中相关方法 创建特效的位置 创建特效框 核心修改 调整视图,自己加个背景,不用原来的 设置 tipsLayout_bg 的层级 结果预览 参考资料 需求场景 策划说我们的tips特效框,遮挡文字。如果按官方说的设为底层又跑到背景框后…

Java 注解与 APT(Annotation Processing Tool)

Java 注解与 APT&#xff08;Annotation Processing Tool&#xff09; 注解&#xff08;Annotation&#xff09;基础 注解是 Java 语言的一种元数据形式&#xff0c;它可以在代码中添加标记信息&#xff0c;用于描述代码的额外信息&#xff0c;但不会直接影响代码的执行逻辑。注…

Unity 检测网络-判断当前(Android/Windows平台)设备是否连接了指定WiFi

判断设备是否连接了特定的网络1.Unity 脚本2.Unity AndroidManifest.xml文件①改个设置②补充权限语句1.Unity 脚本 using UnityEngine; using System.Collections; using System.Diagnostics; using Debug UnityEngine.Debug; using UnityEngine.UI;#if UNITY_ANDROID &…

通过网络强化增强混合IT环境的安全

网络是企业运营的支柱&#xff0c;也是网络犯罪分子和恶意威胁者的主要目标&#xff0c;他们会破坏IT运营的连续性。随着混合云基础设施、远程办公和物联网&#xff08;IoT&#xff09;生态系统的出现&#xff0c;网络边界正在不断扩大&#xff0c;新的漏洞不断产生&#xff0c…

ACP(四):RAG工作流程及如何创建一个RAG应用

RAG的工作原理 你在考试的时候有可能会因为忘记某个概念或公式而失去分数&#xff0c;但考试如果是开卷形式&#xff0c;那么你只需要找到与考题最相关的知识点&#xff0c;并加上你的理解就可以进行回答了。 对于大模型来说也是如此&#xff0c;在训练过程中由于没有见过某个知…

宇视设备视频平台EasyCVR视频设备轨迹回放平台监控摄像头故障根因剖析

监控摄像头的类型繁多&#xff0c;市场上提供了广泛的选择。然而&#xff0c;在使用监控摄像头的过程中&#xff0c;用户可能会遇到云台在很短的时间内出现运转不灵或完全无法转动的问题。这里&#xff0c;我们将对这一常见问题进行深入分析。一、具体的原因&#xff1a; 1、距…

【Uni-App+SSM 宠物项目实战】Day15:购物车添加

大家好!今天是学习路线的第15天,我们正式进入订单与购物车核心模块。昨天完成了商家服务列表的分页加载,今天聚焦“购物车添加”功能——这是连接“商品浏览”与“订单提交”的关键环节,用户可将宠物用品(如粮食、玩具)加入购物车,后续统一结算。 为什么学这个? 购物车…

Java 黑马程序员学习笔记(进阶篇6)

常用的 API1. 正则表达式(1) 题目&#xff1a;贪婪爬取和非贪婪爬取① 贪婪爬取&#xff1a;爬取数据的时候尽可能的多获取数据 ② 非贪婪爬取&#xff1a;爬取数据的时候尽可能的少获取数据 ③ Java中默认的是贪婪爬取 ④ 后面加上 ? 可以转变为非贪婪爬取(2) 捕获分组捕获分…

计算机网络---数据链路层上

文章目录1. 数据链路层的功能2. 组帧2.1 字符填充法2.2 字节填充法2.3 零比特填充法2.4 违规编码2.5 总结3. 差错控制3.1 检错编码3.1.1 奇偶校验3.1.2 循环冗余校验码&#xff08;CRC&#xff09;3.1.3 总结3.2 纠错编码&#xff08;海明校验码&#xff09;3.3 总结4. 流量控制…

机器学习实战项目中,回归与分类模型中该如何科学定义目标变量Y?

前言 在机器学习项目里&#xff0c;目标变量 (Y) 的定义决定了你能解答什么问题&#xff0c;以及模型能给业务带来什么价值。选择不当不仅可能导致模型误差大、偏差严重&#xff0c;还可能让业务决策方向偏离。 本文分两大场景&#xff1a; 供应链项目中的 销量预测&#xff08…

【 C/C++ 算法】入门动态规划-----一维动态规划基础(以练代学式)

每日激励&#xff1a;“不设限和自我肯定的心态&#xff1a;I can do all things。 — Stephen Curry” 绪论​&#xff1a; 本章是动态规划算法的基础入门篇&#xff0c;我将通过三道简单题 一道中等难度的一维动态规划题来带你对动态规划有个初认识&#xff0c;并基本了解动…

深入对比Tomcat与Netty:HTTP请求从网卡到Controller的全链路追踪

我们日常用Spring Boot写的RestController&#xff0c;感觉上就是一个简单的方法&#xff0c;但它背后其实有一套复杂的网络服务在支撑。一个HTTP请求到底是怎么从用户的浏览器&#xff0c;穿过层层网络&#xff0c;最终抵达我们代码里的Controller方法的&#xff1f;理解这个过…

GO学习记录十——发包

记录下不同平台的发包操作和期间遇到的问题 1.命令&#xff1a; $env:GOOSlinux $env:GOARCHamd64 go build -o release/HTTPServices-linux第一行&#xff0c;配置平台&#xff0c;linux、windows 第二行&#xff0c;配置部署服务器的处理器架构 第三行&#xff0c;输出目标文…

贪心算法与动态规划

1. 什么是贪心算法&#xff1f; 贪心算法是一种在每一步选择中都采取在当前状态下最好或最优&#xff08;即最有利&#xff09;的选择&#xff0c;从而希望导致结果是全局最好或最优的算法。 核心思想&#xff1a;“每步都贪心地选择眼前最好的&#xff0c;不去考虑整个未来的长…

学会“读网页”:生成式 AI 在足球赛事信息整理中的实战

逐步教程&#xff08;Step-by-Step&#xff09; — 适合初学者与教学类文章 背景&#xff08;为什么要这样做&#xff09; 对于足球迷、资讯编辑与数据分析师来说&#xff0c;最快、最准确把握一场比赛的核心信息至关重要&#xff1a;比分、关键事件&#xff08;进球、点球、红…