视图

来源:互联网 发布:wps表格怎么恢复数据 编辑:程序博客网 时间:2024/04/30 00:24

视图

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

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

基本语法: 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 existmysql> 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
原创粉丝点击