首页 > 数据库 >MySQL--视图

MySQL--视图

时间:2023-10-28 18:32:16浏览次数:25  
标签:语句 -- create 视图 int MySQL declare select

一、视图

视图是一个虚拟表,是sql的查询结果,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据,在使用视图时动态生成。单表视图的数据变化会影响到基表

创建视图:

create view 视图名 as 查询语句

create view newresult
as
select 
    s.studentName as 姓名, sub.subjectName as 课程, r.examDate as 考试时间, r.studentResult as 成绩 
from student s 
                            inner join result r on s.studentNo=r.studentNo
                            inner join subject sub on r.subjectNo=sub.subjectNo;


select 课程,成绩 from newresult where 成绩>=80; ##视图的使用和表的使用一样


create view newstudent 
as
select * from student where studentNo >25;

修改视图:

alter view 视图名 as 查询语句

alter view newstudent 
as
select * from subject;

删除视图:

drop view 视图名;

drop view newstudent;
drop view newresult;

二、存储过程

17.1 基础

储存过程是一个可编程的函数,它在数据库中创建并保存。它可以有SQL语句和一些特殊的控制结构组成。当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看做是对编程中面向对象方法的模拟。它允许控制数据的访问方式。

创建语法:

delimiter 标识符create procedure 储存过程名称(参数)beginsql语句集end标识符

调用语法:

call 储存过程名称(参数);

删除语法:

drop procedure 储存过程名称

注意:储存过程不支持修改,如果要修改,只能删除了重建

基础案例:

delimiter $$
create procedure querygradesub(in gn varchar(50))
begin
    declare gid int default 0;
    select gradeId into gid from grade where gradeName=gn;
    select * from subject where gradeId=gid;
end
$$
call querygradesub('三年级');#调用存储过程

17.2 定义参数

定义参数的语法:

(in 参数名1 数据类型,out 参数名2 数据类型,...,inout 参数名n 数据类型)

in 输入参数 (只接收用户数据传递)

delimiter !!
create procedure demo1(in d int)
begin
    declare result varchar(50);
    case
        when d>=1 and d<=5 then set result="这是工作日";
        when d=6 then set result='这是星期六';
        when d=7 then set result='这是星期天';
        else set result='数据错误';
    end case;   
    select result;
end
!!

call demo1(7)

out 输出参数 (不接收用户数据传递,但它会向用户传递数据)

delimiter !!
create procedure demo1(in d int,out result varchar(50))
begin
    case
        when d>=1 and d<=5 then set result="这是工作日";
        when d=6 then set result='这是星期六';
        when d=7 then set result='这是星期天';
        else set result='数据错误';
    end case;   
end
!!

call demo1(7,@r); #@r直接就这样写上去,就相当于是引用数据类型,在存储过程中发生了变化 @r也会跟着发生变化
select @r;

inout 输入输出参数 (既接收用户数据传递,又向用户传递数据)

delimiter **
create procedure demo2(inout sum int)
begin
    declare i int default 1;
    while i<=100 do
        set sum=sum+i;
        set i=i+1;
    end while;
end
**
set @sum=50;
call demo2(@sum);
select @sum;

17.3 定义局部变量

1、定义变量必须在begin end之间

2、定义变量要写在begin之下,其他代码之上

定义变量语法:

declare 变量名 数据类型 default 默认值;

declare i int; 类似于 int i;

declare i int default 1; 类似于 int i=1;

赋值:

set 变量名=值; 注意局部变量的使用不需要再写@ @变量名只是在存储过程之外时使用

select count(1) into 变量名 from 表名; *在存储过程中使用into进行赋值 , 在存储过程之外 select @c:=count(1) from 表名.

select gradeId into gid from grade where gradeName=gn;

注意: 必须保证select只能返回一个结果

17.4 控制语句

1) 判断语句

if 条件 then
    #SQL语句
elseif 条件 then
    #SQL语句
elseif 条件 then
    #SQL语句
....
else
    #SQL语句
end if;

案例:

delimiter &&
create procedure demo3()
begin
    declare num int;
    declare result varchar(50);
    select count(1) into num from student;
    if num<15 then set result="小班";
    elseif num>=15 and num<=30 then set result="中班";
    else set result="大班";
    end if;
    select result;
end
&&

call demo3();

2) 循环结构

语法:

while 条件 do
    #SQL语句
end while;

#创建存储过程要求对bank表插入一千万条记录,插入记录之前需要先判断bank是否存在,不存在就创建

delimiter &&
create procedure createbankandinsert()
begin
    declare i int default 1;
    declare c int default 0;
    create table if not exists bank(
        id int primary key auto_increment not null,
        name varchar(50),
        bank decimal(11,2)
    )engine=innodb charset=utf8;
    start transaction;
    while i<=1000000 do
            insert into bank values(null,CONCAT("张三",i),i);
            set c=c+ROW_COUNT();
            set i=i+1;
    end while;
    if c=1000000 then commit;
    else rollback;
    end if;
end
&&

call createbankandinsert()

标签:语句,--,create,视图,int,MySQL,declare,select
From: https://blog.51cto.com/u_16261728/8072648

相关文章

  • JS加密/解密之逻辑运算符加密进阶篇
    前言 前篇给大家介绍了运算符不为人知的基础知识。他们的各种表达形式,今天我们从这个基础上,继续进一步告诉大家,如何对字符串进行加密处理。还是那句话,技术人不废话,直接晒代码。示例源代码//字符串加密示例letstr="HelloWorld";//加密letencryptedString=[[]+[]+......
  • 09-同步
    09-同步一、背景到目前为止多道程序设计(multi-programming):现代操作系统的重要特性并行很有用(为什么?)多个并发实体CPU(s)I/O用户进程/线程:操作系统抽象出来用于支持多道程序设计CPU调度:实现多道程序设计的机制调度算法-不同的策略接下来协同多道程序设计和并发问题......
  • 系统集成知识点速记口诀-数据分析
    成本效益定最佳,挣值分析比基准,趋势分析预未来,偏差分析比计划,储备分析比剩余,应急已知未知险,管理未知未知险,多个方案决策树,潜在影响敏感性,又被称作龙卷风,相关分析看利益,权高利高重管理,权高利低令满意,权低利高随告知,权低利低仅监督。......
  • Commands and Queries 设计模式详解
    在Angular应用开发领域,CommandsandQueries设计模式是一个关键的概念,它有助于有效地管理应用程序的状态和与后端的交互。本文将深入探讨这一设计模式的核心要点,并通过实际示例来加以说明。基本概念命令(Commands)命令代表了一项能够改变系统状态的操作,通常通过向后端发起RES......
  • 系统集成知识点速记口诀-变更
    看见变更要分析,流程一个不能少,除非法律和政府,变更发生先识别,询问原因再记录,正式记录评影响,然后提交CCB,批准拒绝生日志,更新原来旧计划,发布通知干系人,实施批准的变更,记录原因和措施,作为经验来总结,审查实施的变更,确认变更是最后,启动一定不变更,修改章程无权限,规划变更看批准,没有批......
  • 系统集成知识点速记口诀-人际关系与团队技能篇
    达成一致用引导,专家匿名德尔菲,资源进度优先级,冲突管理不可少,问题解决是双赢,强制采纳最快速,合作妥协是次好,求同存异调气氛,撤退搁置是最差。观察交谈需跟随,沟通方法应恰当,互动沟通最有效,开会电话和视频,推式沟通不主动,电子邮件最常用,拉式沟通获信息,门户网站知识库。......
  • 抖音点赞和公屏检测回复,不完整程序
    fromseleniumimportwebdriverimporttimeimportpickleedge=webdriver.Edge()edge.maximize_window()#设置最大等待时长为10秒edge.implicitly_wait(10)edge.get('https://www.douyin.com/')time.sleep(1)input("登入抖音账号后,请输入任意键继续...")time.slee......
  • 系统集成知识点速记口诀-进度网络分析
    关键路径不受约,最长持续时间段,最小浮动和最短,资源优化受约束,平衡延长可用性,平滑不会改进度,范围不变用压缩,加班赶工增成本,快速跟进加风险,假设不成变风险,应急储备来帮忙,蒙特卡洛是(S)曲线,挣值分析也可用,提前是负滞后正。......
  • Angular 应用如何从 Transfer State 状态中读取数据
    在Angular应用程序中,数据的传递和共享是一个重要的问题。Angular提供了多种机制来处理这个问题,其中之一就是TransferState机制。本文将深入探讨上述代码中的AngularTransferState的用法,并介绍如何在Angular应用中有效地利用它。AngularTransferState简介AngularTransferS......
  • 1、Keepalived原理使用
    keepalived是一个类似于layer3,4&5交换机制的软件,也就是我们平时说的第3层、第4层和第5层交换。Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web......