MySQL 创建一个视图
示例
礼遇
CREATEVIEW语句需要该视图的CREATEVIEW特权,以及SELECT语句选择的每个列的某些特权。对于SELECT语句中其他地方使用的列,您必须具有SELECT特权。如果存在ORREPLACE子句,则您还必须具有该视图的DROP特权。CREATEVIEW也可能需要SUPER特权,具体取决于DEFINER值,如本节后面所述。
引用视图时,将进行特权检查。
视图属于数据库。默认情况下,将在默认数据库中创建一个新视图。要在给定的数据库中显式创建视图,请使用标准名称
例如:
db_name.view_name
mysql> CREATE VIEWtest.vAS SELECT * FROM t;
注–在数据库中,基本表和视图共享相同的名称空间,因此基本表和视图不能具有相同的名称。
视图可以:
由多种SELECT语句创建
参考基本表或其他视图
使用联接,UNION和子查询
SELECT甚至不需要引用任何表
另一个例子
下面的示例定义一个视图,该视图从另一个表中选择两个列以及从这些列中计算出的表达式:
mysql> CREATE TABLE t (qty INT, price INT); mysql> INSERT INTO t VALUES(3, 50); mysql> CREATE VIEW v AS SELECT qty, price, qty*price AS value FROM t; mysql> SELECT * FROM v; +------+-------+-------+ | qty | price | value | +------+-------+-------+ | 3 | 50 | 150 | +------+-------+-------+
限制条件
在MySQL5.7.7之前,SELECT语句不能在FROM子句中包含子查询。
SELECT语句不能引用系统变量或用户定义的变量。
在存储的程序中,SELECT语句不能引用程序参数或局部变量。
SELECT语句不能引用准备好的语句参数。
定义中引用的任何表或视图都必须存在。创建视图后,可以删除
定义所引用的表或视图。在这种情况下,使用视图会导致错误。要检查视图定义中是否存在此类问题,请使用CHECKTABLE语句。
该定义不能引用TEMPORARY表,也不能
创建TEMPORARY视图。
您无法将触发器与视图关联。
SELECT语句中列名的别名将根据最大列长度64个字符(而不是最大别名
长度256个字符)进行检查。
AVIEW可能会优化,也可能会不优化SELECT。优化的可能性不大。