视图

视图

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

视图不包含任何列和数据,它包含的是一个查询。
重要的是视图仅仅是用来查看存储在别处的数据的一种设施,视图本身不包含数据,因此它们返回的数据时从其他表中检索出来的。在添加或更改这些表中的数据时,视图将返回改变过的数据。

基本语法: CREATE VIEW 视图名称 AS (这里是SELECT 查询语句)

—>使用视图的好处?

  • 使操作简单化,可以对经常使用的查询定义一个视图,使用户不必为同样的查询操作指定条件。
  • 增加数据的安全性,通过视图,用户只能查询和修改指定的数据。
  • 提高表的逻辑独立性,视图可以屏蔽原有表结构变化带来的影响。
2.存储过程

存储过程简单来说,就是为以后的使用而保存的一条或者多条SQL语句的集合。可将其视为批文件。

总的来说,使用存储过程有三个主要的好处,即简单、安全、高性能。

就我个人理解来说,存储过程就类似一个实现某个特定功能的小接口或者函数,调用它可以实现对数据的某种处理。

下面举例来说明一下:

首先我们修改一下MYSQL中的结束符(从;修改为//)

mysql> delimiter //

1.无传入参数的存储过程:

显示版本:

mysql> CREATE PROCEDURE pro2()
    -> SELECT VERSION()//
Query OK, 0 rows affected (0.00 sec)

mysql> CALL pro2()//
+------------+
| VERSION()  |
+------------+
| 5.6.26-log |
+------------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

其中 CALL 存储过程名称 用来执行存储过程。

2.带有传入参数的存储过程

现在我们创建一个删除指定id记录的存储过程:

原表:

mysql> select * from course//
+-----------+-------------+
| course_id | course_name |
+-----------+-------------+
|         1 | chinese     |
|         2 | math        |
|         3 | english     |
|         4 | phy         |
|         7 | bio         |
+-----------+-------------+
5 rows in set (0.00 sec)

创建存储过程并且调用:

mysql> CREATE PROCEDURE removebyid(IN id int)
    -> BEGIN
    -> DELETE FROM course WHERE course_id=id;
    -> END
    -> //
Query OK, 0 rows affected (0.00 sec)

mysql> DELIMITER ;
mysql> CALL removebyid(7);
Query OK, 1 row affected (0.06 sec)

mysql> select * from course;
+-----------+-------------+
| course_id | course_name |
+-----------+-------------+
|         1 | chinese     |
|         2 | math        |
|         3 | english     |
|         4 | phy         |
+-----------+-------------+
4 rows in set (0.00 sec)

注意,这里我们用到的‘形参’为id,这个形参的名字不能与表的字段的名字相同,否则会产生意想不到的后果。

IN:表示后面跟的是输入参数。

3.带有输出参数的存储过程

例子如下:

mysql> DELIMITER //
mysql> CREATE PROCEDURE pro1(IN id INT,OUT nums INT)
    -> BEGIN
    -> DELETE FROM course WHERE course_id=id;
    -> SELECT COUNT(*) FROM course INTO nums;
    -> END
    -> //
Query OK, 0 rows affected (0.00 sec)

mysql> DELIMITER ;
mysql> SELECT * FROM course;
+-----------+-------------+
| course_id | course_name |
+-----------+-------------+
|         1 | chinese     |
|         3 | english     |
|         2 | math        |
|         4 | phy         |
+-----------+-------------+
4 rows in set (0.00 sec)

mysql> CALL rpo(2,@num);
ERROR 1305 (42000): PROCEDURE learnsql.rpo does not exist
mysql> CALL pro1(2,@num);
Query OK, 1 row affected (0.06 sec)

mysql> select @num;
+------+
| @num |
+------+
|    3 |
+------+
1 row in set (0.00 sec)

上面我们在调用存储过程的时候,将输出参数传入@num这个参数。最后可以显示这个参数。

同理,可以选择多个输出参数,这也正是存储过程与函数不相同的一点。

存储过程的修改:存储过程不能修改过程体,只能删除重新建立存储过程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值