创建和查看视图#
视图(view)是一种特殊的表,它可以把数据表的数据查询或者操作抽象成一个独立的数据库操作。实际上并不存在于数据库中。
数据库中只存储了视图的定义,而视图的实际数据是通过查询数据库来获取的。所以数据库的内容变化后会影响视图的数据。
语法:
CREATE VIEW [view_name] AS [SELECT_statement]
Tips:
- 视图的名称不能和数据库中的其他表名与视图重复。且视图的名称不能以数字开头。
- SELECT_statement 是一个 SELECT 语句。可查询多个表的数据。对于这个语句有以下限制
- 用户需要有 CREATE VIEW 权限,以及 SELECT 相关表和视图权限。
- SELECT_statement 不能引用系统或用户变量。
- SELECT_statement 不能包含 FROM 子句中的子查询。
- SELECT_statement 不能引用预处理语句参数。
预处理:创建 SQL 语句模板并发送到数据库。预留的值使用参数 "?" 标记 。例如:
INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)
- 创建视图需要引用的表或者视图存在,但创建完成后可以不存在(但数据肯定会出问题了)。可以用
CHECK TABLE
检查表是否存在。 - 视图定义允许使用 ORDER BY 子句。但如果视图中使用了 ORDER BY 子句,那么在查询视图时,视图中的数据也会按照 ORDER BY 子句排序。
- 视图定义不能引用临时表,不能创建临时表视图。
WITH CHECK OPTION
关键字可以让视图检查视图中的数据是否有效。
例子#
从单表创建
CREATE VIEW MyView AS
SELECT * FROM MyTable
从多表创建
CREATE VIEW MyView AS
SELECT * FROM MyTable1, MyTable2
从多表创建,并且指定列
CREATE VIEW MyView AS
SELECT MyTable1.id, MyTable1.name, MyTable2.age
FROM MyTable1, MyTable2
从多表创建,并且指定列,并且指定列的顺序
CREATE VIEW MyView AS
SELECT MyTable1.id, MyTable1.name, MyTable2.age
FROM MyTable1, MyTable2
ORDER BY MyTable1.id, MyTable2.age
指定视图中列的名称即对应关系
CREATE VIEW MyView
(id,name,number) AS
SELECT MyTable1.id, MyTable1.name, MyTable2.age
FROM MyTable1, MyTable2
查询视图#
视图可以用于查询,不建议用于更新数据