视图、存储过程、游标
# 使用视图
视图是虚拟的表。与包含数据的表不一样,视图只包含使用时动态 检索数据的查询
# 使用视图
我们可以使用视图来简化复杂的连结,如果我们不使用视图,例子如下:
SELECT `share`.ID,`share`.title,`comment`.content FROM `comment`,`share` WHERE `comment`.shareID = `share`.ID
下面我们来创建一个视图
CREATE VIEW share_comment AS SELECT `share`.ID,`share`.title,`comment`.content FROM `comment`,`share` WHERE `comment`.shareID = `share`.ID
下面我们来使用视图(用法和普通的表是一样的)
SELECT* FROM `share_comment` WHERE ID = 5
视图还有其他用法,这里就不说了,我们可以根据不同的select语句来创建视图以简化我们的操作。
# 更新视图
通常,视图是可更新的(即,可以对它们使用INSERT、UPDATE和 DELETE)。更新一个视图将更新其基表(可以回忆一下,视图本身没有数 据)。如果你对视图增加或删除行,实际上是对其基表增加或删除行
# 存储过程
存储过程可以把一系列的操作存储起来,这样就不需要我们依次输入数据
# 创建存储过程
CREATE PROCEDURE getbyid()
BEGIN
-- 记得加分号
SELECT id,title,content FROM card;
END
2
3
4
5
如果想运行,直接这样
CALL getbyid()
# 使用变量
这个 INT
是MySQL的类型,这里我们传入一个参数
CREATE PROCEDURE getbyid(
IN theid INT
)
BEGIN
SELECT id,title,content FROM card WHERE id = theid;
END
2
3
4
5
6
我们这样调用
CALL getbyid(1)
参数有三种模式(MySQL存储过程参数 - MySQL教程™ (yiibai.com) (opens new window))
IN
- 是默认模式。在存储过程中定义IN
参数时,调用程序必须将参数传递给存储过程。 另外,IN
参数的值被保护。这意味着即使在存储过程中更改了IN
参数的值,在存储过程结束后仍保留其原始值。换句话说,存储过程只使用IN
参数的副本。
OUT
- 可以在存储过程中更改OUT
参数的值,并将其更改后新值传递回调用程序。请注意,存储过程在启动时无法访问OUT
参数的初始值。
INOUT
- INOUT
参数是IN
和OUT
参数的组合。这意味着调用程序可以传递参数,并且存储过程可以修改INOUT
参数并将新值传递回调用程序。
# 删除存储过程
DROP PROCEDURE getbyid
# 使用变量
set @id = 1;
CALL getbyid(@id)
2
结果和上面一样
# 建立智能存储过程
这里我就可以加入一些if语句啥的进行智能判断,不过我估计不是很常用,所以就只贴个代码
# 检查存储过程
SHOW CREATE PROCEDURE getbyid
这个可以获取到一些函数的创建信息
# 游标
# 创建游标
游标只能在存储过程里面使用,我们使用DECLARE来创建游标,里面的内容就是 SELECT ID FROM card
查找出来的值
CREATE PROCEDURE cursorTest()
BEGIN
DECLARE curid CURSOR
FOR
SELECT ID FROM card;
END
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17