视图与索引
2022-05-26 04:12:18

创建和查看视图

视图(view)是一种特殊的表,它可以把数据表的数据查询或者操作抽象成一个独立的数据库操作。实际上并不存在于数据库中。
数据库中只存储了视图的定义,而视图的实际数据是通过查询数据库来获取的。所以数据库的内容变化后会影响视图的数据。

语法:

1
CREATE VIEW [view_name] AS [SELECT_statement]

Tips:

  1. 视图的名称不能和数据库中的其他表名与视图重复。且视图的名称不能以数字开头。
  2. SELECT_statement是一个SELECT语句。可查询多个表的数据。对于这个语句有以下限制
    1. 用户需要有CREATE VIEW权限,以及SELECT相关表和视图权限。
    2. SELECT_statement 不能引用系统或用户变量。
    3. SELECT_statement 不能包含FROM子句中的子查询。
    4. SELECT_statement 不能引用预处理语句参数。

      预处理:创建 SQL 语句模板并发送到数据库。预留的值使用参数 “?” 标记 。例如:

      1
      INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)
  3. 创建视图需要引用的表或者视图存在,但创建完成后可以不存在(但数据肯定会出问题了)。可以用CHECK TABLE检查表是否存在。
  4. 视图定义允许使用ORDER BY子句。但如果视图中使用了ORDER BY子句,那么在查询视图时,视图中的数据也会按照ORDER BY子句排序。
  5. 视图定义不能引用临时表,不能创建临时表视图。
  6. WITH CHECK OPTION 关键字可以让视图检查视图中的数据是否有效。

例子

从单表创建

1
2
CREATE VIEW MyView AS
SELECT * FROM MyTable

从多表创建

1
2
CREATE VIEW MyView AS
SELECT * FROM MyTable1, MyTable2

从多表创建,并且指定列

1
2
3
CREATE VIEW MyView AS
SELECT MyTable1.id, MyTable1.name, MyTable2.age
FROM MyTable1, MyTable2

从多表创建,并且指定列,并且指定列的顺序

1
2
3
4
CREATE VIEW MyView AS
SELECT MyTable1.id, MyTable1.name, MyTable2.age
FROM MyTable1, MyTable2
ORDER BY MyTable1.id, MyTable2.age

指定视图中列的名称即对应关系

1
2
3
4
CREATE VIEW MyView 
(id,name,number) AS
SELECT MyTable1.id, MyTable1.name, MyTable2.age
FROM MyTable1, MyTable2

查询视图

视图可以用于查询,不建议用于更新数据