MySQL进阶篇3-视图和存储过程以及触发器的学习使用

视图/存储过程(函数)/触发器

视图:由表动态生成,虚拟的表,保存的是sql的逻辑。

创建视图:

​ create [or replace] view viewName【列名列表】 as select 语句 [with [cascaded|local] check option]

修改视图:

​ 1、【or replace】必须存在。

​ 2、alter view viewName as …

删除视图:

​ drop view 【if exists】 viewName;

with [cascade|local] check option

操作视图:

1、添加数据。

【insert into view1 values(…)】数据添加到了基表中。

​ 例如,视图是id < 30的进去视图。但是通过视图添加id为40的数据,数据添加成功,但是视图查询不到。因为id<30。

解决: with cascaded check option;增加关联。

​ 通过视图1创建视图2,如果添加了限制条件,两个视图都要检查。给依赖的视图也添加了限制条件

2、 with local check option :

当前的视图限制,递归查找之前的。但是限制不进行传递操作,依赖的视图有限制就有,没有限制就没有。

3、视图更新条件:

​ 视图更新必须与基础表存在行记录1:1的关系。

​ 例如:sum min max count distinct group by、having、union、union all

视图作用:

​ 1、简化操作,直接查询视图就行

​ 2、安全。【数据库可以进行用户授权,但是不能授权到特定行和特定列上。通过视图,用户只能查询和修改他们能见到的数据】

​ 3、数据独立。视图可以帮助用户屏蔽真实表结构变化带来的影响。

存储过程

特点:

​ 1、封装、复用

​ 2、可以接收参数,也可以返回数据

​ 3、减少网络交互,效率提升

创建

create procedure name(args)

begin

​ --sql

end;

create procedure p1()
beginselect count(*) from students;
end;

调用

call procedure_name(args);

查看存储过程

select * from infomation_schema.routines where routine_schema = 'xxx'; --查询指定数据库的存储过程及状态信息
show create procedure p1;--查询某个存储过程的定义

删除存储过程

drop procedure [if exists] p1;

语法结构

变量

1、系统变量:是MySQL服务器提供,不是由用户定义的,属于服务器层面。分为全局变量Global会话变量Session

查看系统变量:

show [session|global] variables [like '_ _ _'];
select @@[session|global] 系统变量名

设置系统变量

set [session|global] 系统变量名=值;
set @@[session|global].系统变量名 = 值;

虽然设置的是全局的,但是服务器重启后,又会初始化为默认值。

2、用户自定义变量

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

赋值操作

--赋值操
set @var_name = xxxx
set @var_name := xxxx
select @var_name:= xxx
select 字段名 into @var_name from 表;
--使用
select @var_name;

随便一变量不会报错,是null。

3、局部变量

​ begin----end之内,用**declare 变量名 变量类型** 来声明。

create procedure p2()
begindeclare myCount int default 0;set myCount = 1;select myCount;
end;
call p2();

语法if elseif end if

if score > 85 then set result = '优秀'
elseif score > 60 thenset result = '及格'
elseset result = '不及格'
end if;sql

存储过程参数

在这里插入图片描述

create procedure p4(in score int,out result varchar(10))
.......
call p4(55,@result);
select @result;inout
set @score = 75;
call p5(@score);
select @score;

case函数

case when value1='1' then '1'when value1='2' then '2'else 3
end case;

while循环

while 1=1 do sql逻辑  set ...
end while;

repeat循环

repeatsql逻辑 set ...util 条件满足,退出循环。【满不满足,至少执行一次】
end repeat;

loop循环

loop实现简单的循环,如果不在sql逻辑中增加推出循环的条件,可以实现死循环。

leave:配合循环使用,退出循环。

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

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

sum相当于loop循环的名称。

游标

用来存储,查询结果集的。在存储过程和函数中,可以使用游标对结果集进行循环处理【因为是结果集,需要循环处理每一行】。

使用:declare 声明,open、fetch、close

decalre cursor_name cursor for 查询语句;

open cursor_name;

fetch cursor_name into 变量

close cursor_name;

条件处理程序

在这里插入图片描述

条件处理程序,就是当遇到sql异常时,需要做的事情。

declare exit handler for SQLSTATE ‘02000’ close u_cursor;

捕获异常02000时,退出exit,并且执行close cursor操作。

for not found 也可以,处理的是02开头的状态码;

create procedure p1(int uage int)
begindelcare uname varchar(100);declare upr varchar(100);declare u_cursor cursor for select name , profession from user where age <= uage; --游标必须放在后边declare exit handler for SQLSTATE '02000' close u_cursor;--捕获异常drop table if exists tb_user_pro;create table tb_user_pro(id int primary key auto_increment,name varchar(100),profession varchar(100));open u_cursor;while true dofetch u_cursor into uname,upro;insert into tb_user_pro values(null,uname,upro);end while;close u_cursor;
end ;

存储函数

存储函数是有返回值的存储过程,参数函数的参数只能是IN类型的,具体语法如下:

create function p1(args…)

returns type [characteristic…]

begin

​ --sql语句

return …;

end;

characteristic说明:

deterministic:相同的输入参数,总是能产生相同的输出结果。

no sql:不包含sql语句。

reads sql data:包含读取sql的语句,但是不包含写入树的语句。

create function f1(n int)
returns int deterministic
begindeclare total int default 0;while n>0 thenset total:= total + n;set n:= n-1;end while;return total;
end;select f1(100);

弊端,必须得有返回值。

但是,存储过程也能有返回值。所以,存储过程可以完全替代存储函数。

触发器

​ 触发器与表有关,在insert/update/delete之前或者之后触发,执行触发器中定义的sql语句集合。

​ 协助应用在数据库确保**数据的完整性,日志记录,数据校验**等操作。

​ 使用别名**OLD和NEW**来引用触发器中发生变化的内容。现在触发器只支持行级触发,不支持语句级触发。【update影响了5行,触发5次触发器。而不是触发一次。】

定义触发器

create trigger trigger_name
before/after insert/update/delete
on table_name for each row --行级触发器
begintrigger_stmt;
end;
--查看
show triggers;
--删除
drop trigger [schema_name].trigger_name; --如果没有指定schema_name,默认是当前数据库。

触发器案例

 create trigger user_insert_triggerafter insert on user for each rowbegininsert into user_logs values(null,'insert',now(),new.id,concat("插入的内容为:",new.id,new.name,new.phone,new.email));end;

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

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

相关文章

国外发达国家码农是真混得好么?

来看看花旗工作十多年的码农怎么说吧! 美国最大的论坛 Reddit&#xff0c;之前有一个热帖&#xff1a; 一个程序员说自己喝醉了&#xff0c;软件工程师已经当了10年&#xff0c;心里有 好多话想说&#xff0c;“我可能会后悔今天说了这些话。”他洋洋洒洒写了 一大堆&#xff…

【Node.js】数据库配置与操作、Session实现原理、JWT实现原理:

文章目录 一、数据库配置与操作【1】 数据库的基本操作【2】 使用 mysql 模块操作 MySQL 数据库 二、Session实现原理【1】HTTP 协议的无状态性【2】Cookie【3】Session 的工作原理【3】在 Express 中使用 Session 认证 三、JWT实现原理【1】JWT 的工作原理【2】JWT 的组成部分…

Linux内核源码分析 (B.4) 深度剖析 Linux 伙伴系统的设计与实现

Linux内核源码分析 (B.4) 深度剖析 Linux 伙伴系统的设计与实现 文章目录 1\. 伙伴系统的核心数据结构2\. 到底什么是伙伴3\. 伙伴系统的内存分配原理4\. 伙伴系统的内存回收原理5\. 进入伙伴系统的前奏5.1 获取内存区域 zone 里指定的内存水位线5.2 检查 zone 中剩余内存容量…

powerDesigner 的基本使用

打开powerDesigner 新建 PDM(物理数据模型) 添加表字段 双击表&#xff0c;设置ID自增 选择导出数据库表SQL 导出成功 使用三方工具连接数据库&#xff0c;然后运行对应SQL文件即可 导入SQL文件数据到powerDesigner

如何用Postman做接口自动化测试

前言 什么是自动化测试 把人对软件的测试行为转化为由机器执行测试行为的一种实践。 例如GUI自动化测试&#xff0c;模拟人去操作软件界面&#xff0c;把人从简单重复的劳动中解放出来。 本质是用代码去测试另一段代码&#xff0c;属于一种软件开发工作&#xff0c;已经开发完…

Kafka 集群与可靠性

文章目录 Kafka集群的目标Kafka集群规模如何预估Kafka集群搭建实战Kafka集群原理成员关系与控制器集群工作机制replication-factor参数auto.leader.rebalance.enable参数 集群消息生产可靠的生产者ISR&#xff08;In-sync Replicas&#xff09;使用ISR方案的原因ISR相关配置说明…

python pycharm 下载 安装 自(1)

pycharm 官网 JetBrains: 软件开发者和团队的必备工具 python 官网 Python Release Python 3.11.5 | Python.org 软件安装 因为python需要借助pycharm所以需要安装 下边截图是重要的部分 pycharm python 终端安装 然后进行全局配置 打开pycahrm 可以在扩展里边搜索中…

docker安装es docker安装Elasticsearch windows linux

下载Elasticsearch和Kibana镜像docker pull elastic/elasticsearch:8.8.2 docker pull elastic/kibana:8.8.2 2. 设置max_map_countwindows&#xff1a; wsl -d docker-desktop sysctl -w vm.max_map_count262144 exit linux&#xff1a;cat /proc/sys/vm/max_map_count sys…

51单片机项目(13)——基于51单片机的智能台灯protues仿真

本次设计&#xff0c;使用protues软件进行仿真&#xff0c;详情如下&#xff1a; 1.输入部分:由热释电红外传感器、光敏传感器、超声波测距传感器所构成的子电路组成。 2.输出模块:由1602液晶显示及其蜂鸣器报警系统组成。 3.中央处理器:主要有AT89C52单片机构成。 4.工作过…

【Linux】进程控制

目录 一、进程创建初识fork函数fork函数返回值写时拷贝fork常规用法fork调用失败的原因 二、进程终止进程退出场景进程常见退出方法_exit函数与exit函数 三、进程等待进程等待必要性进程等待的方法waitwaitpid 获取子进程status非阻塞等待测试 四、进程程序替换替换原理替换函数…

Python WEB框架FastAPI (二)

Python WEB框架FastAPI &#xff08;二&#xff09; 最近一直在使用fastapi&#xff0c;随着使用的深入发现我对于它的了解还是太少了&#xff0c;以至于踩了一些坑。所以在这里记录一下&#xff0c;愿看到的小伙伴不迷路。 路径传参并发问题 一、路径传参 这是对上一个传参…

数字化管理新革命,AI数字人CEO登场引领变革!

王一博老板乐华娱乐CEO杜华推出了她的双生数字人华华子&#xff0c;专门替自己直播卖货。在没有任何宣传的情况下&#xff0c;仅仅在短短的10分钟直播时间内&#xff0c;观众人数就飙升至30万人&#xff01;同时&#xff0c;“杜华AI华华子直播”更是迅速登上了微博热搜榜。这一…

【Mysql】数据库第四讲(表的增删改查操作 超全面 附实操案例)

表的查询 1.Create 表的创建1.1单行插入多行插入1.2替换 2.Retrieve 读取2.1全列查询2.2指定列查询2.3查询字段为表达式2.4为查询结果指定别名2.5结果去重2.6WHERE条件2.7结果排序2.8筛选分页结果 3.Update更新案例 4.Delete删除案例截断表插入查询结果 5.聚合函数 1.Create 表…

Intellij idea 2023 年下载、安装教程、亲测可用

文章目录 1 下载与安装IDEA2 常用设置设置 Java JDK 版本自动导入包、移除包IDEA 自动生成 author 注释签名java.io.File 类无法自动提示导入&#xff1f;高亮显示与选中字符串相同的内容IDEA 配置 MavenIDEA 连接 Mysql 数据库 3 参考文章 1 下载与安装IDEA 首先先到官网下载…

centos设置固定ip

ip addr查看是哪张网卡我这里是 编辑 设置

【flutter】架构之商城main入口

架构之商城main入口 前言一、项目模块的划分二、入口main的配置三、配置文件怎么做总结 前言 本栏目我们将完成一个商城项目的架构搭建&#xff0c;并完善中间的所有功能&#xff0c;总页面大概200个&#xff0c;如果你能看完整个栏目&#xff0c;你肯定能独立完成flutter 项目…

基于自编译的onlyoffice镜像,关于修改字体的问题

基于自编译的onlyoffice镜像&#xff0c;关于修改字体的问题 自编译onlyoffice镜像来自于 https://blog.csdn.net/Gemini1995/article/details/132427908 该镜像里面没有documentserver-generate-allfonts.sh文件&#xff0c;所以需要自己创建一个&#xff08;建议放在/usr/b…

接入网络技术

接入网络&#xff1a;是实现网络边缘的端系统与网络核心连接与接入的网络。 常见有以下几类&#xff1a; 1、电话拨号接入&#xff1a;这类接入方式在早期接入网络中主要用于家庭接入&#xff0c;利用了电话网络覆盖广泛的优点&#xff0c;能够方便地实现分散的家庭用户接入网…

八、实时时钟

八、实时时钟 简介时钟芯片模块代码可调时钟 简介 引脚定义和应用电路 我们的开发板没有备用电池 寄存器定义 时序定义 在时钟的上升沿&#xff0c;IO口的数据被写入到芯片中&#xff0c;在下降沿&#xff0c;芯片就会将数据输出。如果是写入&#xff0c;那么在整个过程中&…

学习笔记|外部中断|INT0|中断列表|STC32G单片机视频开发教程(冲哥)|第十五集:中断系统和外部中断

文章目录 1.中断和中断系统1.1什么是中断?1.2什么是中断系统1.3中断系统的优点1.4 中断系统包含哪些中断源1.5.中断次序 2.什么是外部中断3.外部中断的用法4.外部中断的用法新的测试场景完整代码 总结课后练习: 上节课我们学完了GPIO的矩阵按键&#xff0c;已经把这个GPIO的一…