创建视图:
create view view_name as select id, name from table_name;
视图其实只保存了一个sql语句,每次执行视图操作,都会执行该sql语句。
select * from (select id, name from table_name) as tmp_table;
视图的好处是用来1.隐藏数据 2. 将复杂连接语句替换为view。
创建完之后,会将table_name的表中得id,name字段作为一个表的形式存在。类似连接,这样就可以将一个表中不想让其他权限的人操作的部分作为一个视图创建。
创建完视图后,虽然可以通过视图像表中插入数据,但是不推荐。
因为如果表中包含不能为空得字段,而视图中没有,视图中插入记录时,该字段为NULL。若该字段不准为NULL,则无法通过视图进行插入数据。最好只将视图用于查询。
以下修改视图的命令,跟表类似。
drop view [if exists] v_name;
alter view v_name as select id, name, new_col_name from table_name;
alter view v_name (col_1, col2) as select id, name from tb_name;
多表联合
create view v_new (v_col1, v_col2) as select col1, col2 from tb1 join tb2 using(id);
视图的内部构建算法,mysql会根据实际情况进行选择。
1.merge
每当执行view的时候,将外部的sql语句,与构建view的sql语句合并后,执行。也就是说每次都会执行一个很长的sql语句。
create view view_name as select id, name from table_name; //紫色的为构建sql语句
select * from view_name; // 这个我们成为外部的sql语句。
2.tamptable
每当查询的时候,将视图的select语句构建一个临时表,然后在表中执行外部的sql语句。
<完>