程序员书籍笔记 程序员书籍笔记
  • JavaScript
  • HTML/CSS
  • PHP
  • Python
  • Go
  • 数据库
  • 容器
  • 微服务
  • 消息队列
  • 搜索引擎
  • 大数据
  • 鸟哥Linux私房菜
其他
  • 大数据
  • 深度学习
APP下载 (opens new window)
GitHub (opens new window)
  • JavaScript
  • HTML/CSS
  • PHP
  • Python
  • Go
  • 数据库
  • 容器
  • 微服务
  • 消息队列
  • 搜索引擎
  • 大数据
  • 鸟哥Linux私房菜
其他
  • 大数据
  • 深度学习
APP下载 (opens new window)
GitHub (opens new window)
  • 数据库

    • MySQL必知必会

      • 数据检索、排序、过滤
      • 数据处理、汇总、分组
      • 子查询、连表、组合
      • 全文本搜索、插入
      • 更新、删除、表操作
      • 视图、存储过程、游标
        • 使用视图
          • 使用视图
          • 更新视图
        • 存储过程
          • 创建存储过程
          • 使用变量
          • 删除存储过程
          • 使用变量
          • 检查存储过程
        • 游标
          • 创建游标
          • 游标的综合使用
      • 触发器、事务
      • 全球化、安全、维护
    • MongoDB权威指南

  • 容器

  • 微服务

  • 消息队列

  • 搜索引擎

  • 大数据

  • 框架和软件
  • 数据库
  • MySQL必知必会
小游
2021-05-07

视图、存储过程、游标

# 使用视图

视图是虚拟的表。与包含数据的表不一样,视图只包含使用时动态 检索数据的查询

# 使用视图

我们可以使用视图来简化复杂的连结,如果我们不使用视图,例子如下:

SELECT `share`.ID,`share`.title,`comment`.content FROM `comment`,`share` WHERE `comment`.shareID = `share`.ID
1

image-20210511162451499

下面我们来创建一个视图

CREATE VIEW share_comment AS SELECT `share`.ID,`share`.title,`comment`.content FROM `comment`,`share` WHERE `comment`.shareID = `share`.ID
1

image-20210511162612366

下面我们来使用视图(用法和普通的表是一样的)

SELECT* FROM `share_comment` WHERE ID = 5
1

image-20210511162718058

视图还有其他用法,这里就不说了,我们可以根据不同的select语句来创建视图以简化我们的操作。

# 更新视图

通常,视图是可更新的(即,可以对它们使用INSERT、UPDATE和 DELETE)。更新一个视图将更新其基表(可以回忆一下,视图本身没有数 据)。如果你对视图增加或删除行,实际上是对其基表增加或删除行

# 存储过程

存储过程可以把一系列的操作存储起来,这样就不需要我们依次输入数据

# 创建存储过程

CREATE PROCEDURE getbyid()
BEGIN
	-- 记得加分号
    SELECT id,title,content FROM card;
END
1
2
3
4
5

image-20210511163549363

如果想运行,直接这样

CALL getbyid()
1

image-20210511163822833

# 使用变量

这个 INT 是MySQL的类型,这里我们传入一个参数

CREATE PROCEDURE getbyid(
IN theid INT
)
BEGIN
    SELECT id,title,content FROM card WHERE id = theid;
END
1
2
3
4
5
6

我们这样调用

CALL getbyid(1)
1

image-20210511164219829

参数有三种模式(MySQL存储过程参数 - MySQL教程™ (yiibai.com) (opens new window))

IN - 是默认模式。在存储过程中定义IN参数时,调用程序必须将参数传递给存储过程。 另外,IN参数的值被保护。这意味着即使在存储过程中更改了IN参数的值,在存储过程结束后仍保留其原始值。换句话说,存储过程只使用IN参数的副本。

OUT - 可以在存储过程中更改OUT参数的值,并将其更改后新值传递回调用程序。请注意,存储过程在启动时无法访问OUT参数的初始值。

INOUT - INOUT参数是IN和OUT参数的组合。这意味着调用程序可以传递参数,并且存储过程可以修改INOUT参数并将新值传递回调用程序。

# 删除存储过程

DROP PROCEDURE getbyid
1

# 使用变量

set @id = 1;
CALL getbyid(@id)
1
2

结果和上面一样

# 建立智能存储过程

这里我就可以加入一些if语句啥的进行智能判断,不过我估计不是很常用,所以就只贴个代码

image-20210511164755921

image-20210511164803074

# 检查存储过程

SHOW CREATE PROCEDURE getbyid
1

这个可以获取到一些函数的创建信息

image-20210511164924970

# 游标

# 创建游标

游标只能在存储过程里面使用,我们使用DECLARE来创建游标,里面的内容就是 SELECT ID FROM card 查找出来的值

CREATE PROCEDURE cursorTest()
BEGIN
	DECLARE curid CURSOR
	FOR
	SELECT ID FROM card;
END
1
2
3
4
5
6

# 游标的综合使用

这里我们简单的创建一个游标,然后取出第一个数,当然我们还可以进行循环操作,但是这个比较复杂,自己上网查阅。。。

CREATE PROCEDURE cursorTest()
BEGIN
--  声明变量
	DECLARE o INT;
	DECLARE curid CURSOR
	FOR
	SELECT ID FROM card;
	-- 	打开游标
	OPEN curid;
	-- 使用循环
	-- 从游标中获取数据,并存储到o中
	FETCH curid INTO o;
	-- 	打印一下o
	SELECT o;
	-- 关闭游标
	CLOSE curid;
END
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

image-20210511170413644

编辑 (opens new window)
上次更新: 2021/05/11, 19:39:39
更新、删除、表操作
触发器、事务

← 更新、删除、表操作 触发器、事务→

Theme by Vdoing | Copyright © 2021-2021 小游
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式