mysql 视图,说白了就是一张临时表,不过此表可以同步生成此视图的表格的数据;
什么意思呢?举个栗子,
创建一个视图: 根据表A,和表B生成的,生成了一个视图(临时表C),表C中有个字段 为A表的name,当表A中的name修改后,视图表C,会自动同步修改
使用场景:
我认为使用的场景就是比较复杂的查询耗时的查询,那么可以通过视图将查询的中间结果作为视图,加快查询速度.
也可以是复杂查询的分步查询中的一步
视图,有点类似于读写分离,A/B就是主表,C就是从表,C不应该被修改,但是可以及时同步A/B表的数据(类似哈)
而且视图相对简单,容易理解
下面是实际例子截图:
image.png
CREATE OR REPLACE ALGORITHM=TEMPTABLE VIEW
v_device(device_id,mark,NAME,area_point_id,area_point_name) AS
SELECT a.device_id,a.mark,a.device_name,d.area_point_id,d.area_point_name FROM ass_device a
LEFT JOIN `ass_device_area_point` d ON d.device_code = a.device_code
WHERE a.mark =1
-- with check option 不知道为啥,用了报错
将两个表联合查询结果集作为视图v_device 就是;
查询视图,跟正常的表查询一样
select * from v_device
下面详细说下 创建视图的详细解释
1.CREATE OR REPLACE 创建或者修改视图
2.ALGORITHM=TEMPTABLE 可以没有这段,
ALGORITHM:可选。表示视图选择的算法。
UNDEFINED:表示MySQL将自动选择所要使用的算法。
MERGE:表示将使用视图的语句与视图定义合并起来,使得视图定义的某一部分取代语句的对应部分。
TEMPTABLE:表示将视图的结果存入临时表,然后使用临时表执行语句。
- VIEW 关键字视图的意思
- v_device 视图名称
- (device_id,mark,NAME,area_point_id,area_point_name) 视图中的字段
- AS 关键字,作为创建视图的数据来源
- SELECT a.device_id,a.mark,a.device_name,d.area_point_id,d.area_point_name FROM ass_device a
LEFT JOINass_device_area_point
d ON d.device_code = a.device_code
WHERE a.mark =1
视图的数据来源 -
WITH CHECK OPTION:可选。表示修改视图时要保证在该视图的权限范围之内。
========================================================
至此已经结束,我又在程序中试了下,可以用,附上截图image.png不过视图创建一般不在程序中执行,因为视图一旦创建就不需要重复执行了,创建好,数据就会不断地同步