MySQL创建视图


《MySQL 9从入门到性能优化(视频教学版)(数据库技术丛书)》(王英英)【摘要 书评 试读】- 京东图书 (jd.com)

MySQL9数据库技术_夏天又到了的博客-优快云博客

视图是一张虚拟表,是从数据库中一张或多张表中导出来的表。视图还可以在已经存在的视图的基础上进行定义。在视图中用户可以使用SELECT语句查询数据,以及使用INSERT、UPDATE和DELETE修改记录。从MySQL 5.0开始可以使用视图,视图可以使用户操作方便,而且可以保障数据库系统的安全。

视图中包含了SELECT查询的结果,因此视图的创建基于SELECT语句和已存在的数据表。视图可以建立在一张表上,也可以建立在多张表上。本节主要介绍创建视图的方法。

9.2.1  创建视图的语法形式

创建视图使用CREATE VIEW语句,基本语法格式如下:

CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]

VIEW view_name [(column_list)]

AS SELECT_statement

[WITH [CASCADED | LOCAL] CHECK OPTION]

各参数说明如下:

(1)CREATE表示创建新的视图.

(2)REPLACE表示替换已经创建的视图.

(3)ALGORITHM表示视图选择的算法,取值有以下3种:

  • UNDEFINED表示MySQL将自动选择算法。
  • MERGE表示将使用的视图语句与视图定义合并起来,使得视图定义的某一部分取代语句对应的部分。
  • TEMPTABLE表示将视图的结果存入临时表,然后用临时表来执行语句。

(4)view_name为视图的名称,column_list为属性列.

(5)SELECT_statement表示SELECT语句。

(6)WITH [CASCADED | LOCAL] CHECK OPTION表示视图在更新时保证在视图的权限范围之内。CASCADED与LOCAL为可选参数,CASCADED为默认值,表示更新视图时要满足所有相关视图和表的条件;LOCAL表示更新视图时满足该视图本身定义的条件即可。

创建视图语句要求具有针对视图的CREATE VIEW权限,以及针对由SELECT语句选择的每一列上的某些权限。对于在SELECT语句中其他地方使用的列,必须具有SELECT权限。如果还有OR REPLACE子句,则必须在视图上具有DROP权限。

视图属于数据库。在默认情况下,将在当前数据库创建新视图。要想在给定数据库中明确创建视图,创建时应将名称指定为db_name.view_name。

9.2.2  在单表上创建视图

MySQL可以在单张数据表上创建视图。

【例9.1】在表t上创建一个名为“view_t”的视图。

首先创建基本表并插入数据,SQL语句如下:

CREATE TABLE tv (quantity INT, price INT);

INSERT INTO tv VALUES(3, 50);

然后创建视图,SQL语句如下:

CREATE VIEW view_t AS SELECT quantity, price, quantity *price FROM tv;

最后查询视图,SQL语句如下:

mysql> SELECT * FROM view_t;
+----------+-------+-----------------+
| quantity | price | quantity *price |
+----------+-------+-----------------+
|      3   |    50 |          150    |
+----------+-------+-----------------+

默认情况下创建的视图的字段基本表的字段是一样的。

也可以通过指定视图字段的名称来创建视图。

【例9.2】在表tv上创建一个名为“view_t2”的视图,SQL语句如下:

mysql> CREATE VIEW view_t2(qty, price, total ) AS SELECT quantity, price, quantity * price FROM tv;

语句执行成功后,查看view_t2视图中的数据:

mysql> SELECT * FROM view_t2;
+------+-------+-------+
| qty  | price | total |
+------+-------+-------+
|  3  |    50  |   150 |
+------+-------+-------+

可以看到,view_t2和view_t两个视图中的字段名称虽然不同,但数据却是相同的。因此,在使用视图的时候,用户根本就不需要了解基本表的结构,更接触不到实际表中的数据,从而保证了数据库的安全。

9.2.3  在多表上创建视图

在MySQL中也可以使用CREATE VIEW语句在两张或者两张以上的表上创建视图。

【例9.3】在表student和表stu_info上创建视图stu_glass。

首先向两张表中插入数据,SQL语句如下:

mysql> INSERT INTO student VALUES(1,'wanglin1'),(2,'gaoli'),(3,'zhanghai');

mysql> INSERT INTO stu_info VALUES(1, 'wuban','henan'),(2,'liuban','hebei'),
(3,'qiban','shandong');

然后创建视图stu_glass,SQL语句如下:

mysql> CREATE VIEW stu_glass (id,name, glass) AS SELECT student.s_id,
student.name ,stu_info.glass FROM student ,stu_info WHERE student.s_id=stu_info.s_id;

mysql> SELECT * FROM stu_glass;
+------+----------+--------+
| id   | name     | glass  |
+------+----------+--------+
|    1 | wanglin1 | wuban  |
|    2 | gaoli    | liuban |
|    3 | zhanghai | qiban  |
+------+----------+--------+

这个例子就解决了9.1.1节提出的那个问题,通过这个视图可以很好地保护基本表中的数据。这个视图中的信息很简单,只包含了id、姓名和班级,id字段对应表student中的s_id字段,name字段对应表student中的name字段,glass字段对应表stu_info中的glass字段。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值