本文主要介绍MySQL如何创建视图,有助于你更好的理解和学习MySQL。感兴趣的朋友可以了解一下。
基本语法
您可以使用CREATE VIEW语句来创建视图。
语法如下:
将视图名称创建为SELECT语句
语法如下。
视图名称:指定视图的名称。该名称在数据库中必须是唯一的,并且不能与其他表或视图同名。
SELECT语句:指定用于创建视图的SELECT语句,该视图可用于查询多个基础表或源视图。
在创建视图中,对SELECT语句的规范有以下限制:
除了CREATE VIEW权限之外,用户还拥有操作中涉及的基础表和其他视图的相关权限。
SELECT语句不能引用系统或用户变量。
SELECT语句不能在FROM子句中包含子查询。
SELECT语句不能引用预处理语句参数。
定义中引用的表或视图必须存在。但是,创建视图后,可以删除定义引用的表或视图。您可以使用CHECK TABLE语句来检查视图定义中是否存在此类问题。
视图定义中允许使用ORDER BY语句,但是如果从特定视图中选择,并且该视图使用自己的ORDER BY语句,则视图定义中的ORDER BY将被忽略。
不能在定义中引用临时表(临时表),也不能创建临时视图。
With选项意味着在修改视图时,检查插入的数据是否满足WHERE设置的条件。
创建基于单表的视图
MySQL可以在单个数据表上创建视图。
检查test_db数据库中tb_students_info表的数据,如下所示。
MySQL SELECT * FROM TB _ students _ info;
- - - - - - -
| id |姓名|部门id |年龄|性别|身高|登录日期|
- - - - - - -
| 1 |丹妮| 1 | 25 | F | 160 | 2015-09-10 |
| 2 |绿色| 3 | 23 | F | 158 | 2016-10-22 |
| 3 |亨利| 2 | 23 |米| 185 | 2015-05-31 |
| 4 |简| 1 | 22 |女| 162 | 2016-12-20 |
| 5 |吉姆| 1 | 24 |米| 175 | 2016-01-15 |
| 6 |约翰| 2 | 21 | M | 172 | 2015-11-11 |
| 7 |百合| 6 | 22 | F | 165 | 2016-02-26 | 2016
| 8 |苏珊| 4 | 23 | F | 170 | 2015-10-01 |
| 9 |托马斯| 3 | 22 |米| 178 | 2016-06-07 |
| 10 |汤姆| 4 | 23 |米| 165 | 2016-08-05 |
- - - - - - -
一组10行(0.00秒)
[示例1]
在tb_students_info表上创建一个名为view_students_info的视图。输入SQL语句和执行结果如下所示。
mysql创建视图视图_学生_信息
-AS SELECT * FROM TB _ students _ info;
查询正常,0行受影响(0.00秒)
MySQL SELECT * FROM view _ students _ info;
- - - - - - -
| id |姓名|部门id |年龄|性别|身高|登录日期|
- - - - - - -
| 1 |丹妮| 1 | 25 | F | 160 | 2015-09-10 |
| 2 |绿色| 3 | 23 | F | 158 | 2016-10-22 |
| 3 |亨利| 2 | 23 |米| 185 | 2015-05-31 |
| 4 |简| 1 | 22 |女| 162 | 2016-12-20 |
| 5 |吉姆| 1 | 24 |米| 175 | 2016-01-15 |
| 6 |约翰| 2 | 21 | M | 172 | 2015-11-11 |
| 7 |百合| 6 | 22 | F | 165 | 2016-02-26 | 2016
| 8 |苏珊| 4 | 23 | F | 170 | 2015-10-01 |
| 9 |托马斯| 3 | 22 |米| 178 | 2016-06-07 |
| 10 |汤姆| 4 | 23 |米| 165 | 2016-08-05 |
- - - - - - -
一组10行(0.04秒)
默认情况下,创建的视图和基本表的字段是相同的。您也可以通过指定视图字段的名称来创建视图。
[示例2]
在tb_students_info表上创建一个名为v_students_info的视图。输入SQL语句和执行结果如下所示。
mysql创建视图v _学生_信息
-(身份证,姓名,身份证,年龄,性别,身高,日期)
-选择id、姓名、部门id、年龄、性别、身高、登录日期
-来自tb _ students _ info
查询正常,0行受影响(0.06秒)
MySQL SELECT * FROM v _ students _ info;
- - - - - - -
|身份证|姓名|身份证|年龄|性别|身高|日期|
- - - - - - -
| 1 |丹妮| 1 | 24 | F | 160 | 2015-09-10 |
| 2 |绿色| 3 | 23 | F | 158 | 2016-10-22 |
| 3 |亨利| 2 | 23 |米| 185 | 2015-05-31 |
| 4 |简| 1 | 22 |女| 162 | 2016-12-20 |
| 5 |吉姆| 1 | 24 |米| 175 | 2016-01-15 |
| 6 |约翰| 2 | 21 | M | 172 | 2015-11-11 |
| 7 |百合| 6 | 22 | F | 165 | 2016-02-26 | 2016
| 8 |苏珊| 4 | 23 | F | 170 | 2015-10-01 |
| 9 |托马斯| 3 | 22 |米| 178 | 2016-06-07 |
| 10 |汤姆| 4 | 23 |米| 165 | 2016-08-05 |
- - - - - - -
一组10行(0.01秒)
可以看到view_students_info和v_students_info中的字段名称不同,但是数据是相同的。因此,在使用视图时,用户可能不需要知道基本表的结构,也无法接触到实际表中的数据,从而保证了数据库的安全性。
创建基于多表的视图
您还可以使用create view语句在MySQL中的两个以上的表中创建视图。
[示例3]
在表tb_student_info和表tb_departments上创建视图v_students_info。输入SQL语句和执行结果如下所示。
mysql创建视图v _学生_信息
-(身份证,姓名,身份证,年龄,性别,身高,日期)
-选择id、姓名、部门id、年龄、性别、身高、登录日期
-来自tb _ students _ info
查询正常,0行受影响(0.06秒)
MySQL SELECT * FROM v _ students _ info;
- - - - - - -
|身份证|姓名|身份证|年龄|性别|身高|日期|
- - - - - - -
| 1 |丹妮| 1 | 24 | F | 160 | 2015-09-10 |
| 2 |绿色| 3 | 23 | F | 158 | 2016-10-22 |
| 3 |亨利| 2 | 23 |米| 185 | 2015-05-31 |
| 4 |简| 1 | 22 |女| 162 | 2016-12-20 |
| 5 |吉姆| 1 | 24 |米| 175 | 2016-01-15 |
| 6 |约翰| 2 | 21 | M | 172 | 2015-11-11 |
| 7 |百合| 6 | 22 | F | 165 | 2016-02-26 | 2016
| 8 |苏珊| 4 | 23 | F | 170 | 2015-10-01 |
| 9 |托马斯| 3 | 22 |米| 178 | 2016-06-07 |
| 10 |汤姆| 4 | 23 |米| 165 | 2016-08-05 |
- - - - - - -
一组10行(0.01秒)
这个视图可以很好的保护基本表中的数据。该视图包含s_id、s_name和dept_name。s_id字段对应tb_students_info表中的id字段,s_name字段对应tb_students_info表中的name字段,dept_name字段对应tb_departments表中的dept_name字段。
查询视图
一旦定义了视图,就可以像查询数据表一样,使用SELECT语句查询视图中的数据。语法与基本表的语法相同。
视图主要用于以下几个方面的查询:
使用视图重新格式化检索到的数据。
使用视图简化复杂的表连接。
使用视图过滤数据。
DESCRIBE可以用来查看视图,语法如下:
描述视图名称;
[例4]
通过DESCRIBE语句查看视图v_students_info的定义。输入SQL语句和执行结果如下。
mysql描述v _ students _ info
- - - - - -
| Field | Type | Null | Key | Default | Extra |
- - - - - -
| s_id | int(11) | NO | | 0 | |
| s_name | varchar(45) |是| | NULL | |
| d_id | int(11) | YES | | NULL | |
| s_age | int(11) | YES | | NULL | |
| s_sex | enum(M , F) | YES | | NULL | |
| s_height | int(11) | YES | | NULL | |
| s_date | date |是| | 2016-10-22 | |
- - - - - -
一组7行(0.04秒)
注意:DESCRIBE一般可以缩写为DESC,输入该命令的执行结果与输入DESCRIBE相同。
这就是MySQL如何创建视图的细节。关于MySQL如何创建视图的更多信息,请关注我们的其他相关文章!