新手发帖,很多方面都是刚入门,有错误的地方请大家见谅,欢迎批评指正
视图是从一个或多个表中导出来的表,是一种虚拟存在的表。
视图就像一个窗口,通过这个窗口可以看到系统专门供给的数据。
这样,用户可以用不看到整个数据库中的数据,而之心关对自己有效的数据。
数据库中只寄存了视图的定义,而没有寄存视图中的数据,这些数据寄存在来原的表中。
应用视图询查数据时,数据库系统会从来原的表中掏出对应的数据。
视图中的数据依赖于来原表中的数据,一旦表中数据生发转变,显示在视图中的数据也会生发转变。
1.使操纵简单化,可以对经常应用的询查定义一个视图,应用户不必为一样的询查操纵指定条件
2.加增数据的安全性,通过视图,用户只能询查和改修指定的数据。
3.高提表的逻辑独立性,视图可以屏蔽原有表构结变更带来的影响。
总而言之,应用视图的大部份况情是为了障保数据安全性,高提询查效率
参考表:
CREATE [ALGORITHM]={UNDEFINED|MERGE|TEMPTABLE}] VIEW 视图名 [(性属单清)] AS SELECT 语句 [WITH [CASCADED|LOCAL] CHECK OPTION];
视图名表现要建创的视图的名称
性属单清表现视图中的列名,认默与SELECT询查结果中的列名雷同(可选数参)
WITH CHECK OPTION表现更新视图时要证保在该试图的限权范围内之(可选数参)
tips:建创试图时最好加上WITH CASCADED CHECK OPTION数参,这类方法比拟格严
可以证保数据的安全性
mysql> CREATE VIEW work_view(ID,NAME,ADDR) AS SELECT id,name,address FROM work; Query OK, 0 rows affected (0.05 sec)
AS表现将面后SELECT 语句中的询查结果赋给面前的视图中
mysql> CREATE ALGORITHM=MERGE VIEW work_view2(ID,NAME,SALARY) -> AS SELECT work.id,name,salary FROM work,salary -> WHERE work.id=salary.id -> WITH LOCAL CHECK OPTION; Query OK, 0 rows affected (0.02 sec)
mysql> SELECT * FROM work_view; +----+--------+--------+ | ID | NAME | ADDR | +----+--------+--------+ | 1 | 张三 | 北京 | | 2 | 李四 | 上海 | | 3 | 王五 | 湖南 | | 4 | 赵六 | 重庆 | +----+--------+--------+ 4 rows in set (0.00 sec)
别忘了,视图也是一张表,只不过它是虚拟的
mysql> DESCRIBE work_view; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | ID | int(10) | NO | | NULL | | | NAME | varchar(20) | NO | | NULL | | | ADDR | varchar(50) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 3 rows in set (0.00 sec)
mysql> SHOW TABLE STATUS LIKE 'work_view'\G *************************** 1. row *************************** Name: work_view Engine: NULL Version: NULL Row_format: NULL Rows: NULL Avg_row_length: NULL Data_length: NULL Max_data_length: NULL Index_length: NULL Data_free: NULL Auto_increment: NULL Create_time: NULL Update_time: NULL Check_time: NULL Collation: NULL Checksum: NULL Create_options: NULL Comment: VIEW 1 row in set (0.00 sec)
如果应用SHOW TABLE STATUS查看一张实真表,结果就不会如此
mysql> SHOW CREATE VIEW work_view\G *************************** 1. row *************************** View: work_view Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `work_view` AS select `work`.`id` AS `ID`,`work`.`name` AS `NAME`,`work`.`address` AS `ADDR` from `work` character_set_client: utf8 collation_connection: utf8_general_ci 1 row in set (0.00 sec)
mysql> SELECT * FROM information_schema.views\G *************************** 1. row *************************** TABLE_CATALOG: def TABLE_SCHEMA: person TABLE_NAME: work_view VIEW_DEFINITION: select `person`.`work`.`id` AS `ID`,`person`.`work`.`name` AS `NAME`,`person`.`work`.`address` AS `ADDR` from `person`.`work` CHECK_OPTION: NONE IS_UPDATABLE: YES DEFINER: root@localhost SECURITY_TYPE: DEFINER CHARACTER_SET_CLIENT: utf8 COLLATION_CONNECTION: utf8_general_ci *************************** 2. row *************************** TABLE_CATALOG: def TABLE_SCHEMA: person TABLE_NAME: work_view2
不过,常通应用SHOW CREATE VIEW 更加便方
这里信息太长,没有完整举列……
改修视图是指改修数据库中已存在的表的定义,当基本表的某些段字生发转变时,可以通过改修视图来坚持视图和基本表之间分歧
mysql> CREATE OR REPLACE ALGORITHM=TEMPTABLE -> VIEW work_view(ID,NAME) -> AS SELECT id,name FROM work; Query OK, 0 rows affected (0.03 sec)
在视图存在的况情下可对视图停止改修,视图不在的况情下可建创视图
其基本用法和CREATE VIEW 几乎分歧
mysql> ALTER VIEW work_view2(NAME,SALARY,ADDR) -> AS SELECT name,salary,address FROM work,salary -> WHERE work.id=salary.id; Query OK, 0 rows affected (0.03 sec)
如果是实真的话,对小偷说来极为便方
更新视图是指通过视图来插入、更新和删除表中的数据,认为视图是一个虚拟表,其中木有数据
通过视图更新时,都是转换到基本表来更新
mysql> UPDATE work_view2 SET SALARY=5899.00 WHERE NAME='张三'; Query OK, 1 row affected (0.03 sec) Rows matched: 1 Changed: 1 Warnings: 0
mysql> UPDATE salary SET salary=5899.00 WHERE id=1;
一般况情下,最好将视图作为询查数据的虚拟表,而不要通过视图更新数据
删除视图是指删除数据库中已存在的视图,删除视图时,只能删除视图的定义,不会删除数据
mysql> DROP VIEW IF EXISTS work_view; Query OK, 0 rows affected (0.00 sec) mysql> DROP VIEW work_view2; Query OK, 0 rows affected (0.01 sec)
文章结束给大家分享下程序员的一些笑话语录: 警告
有一个小伙子在一个办公大楼的门口抽着烟,一个妇女路过他身边,并对他 说, “你知道不知道这个东西会危害你的健康?我是说, 你有没有注意到香烟 盒上的那个警告(Warning)?”
小伙子说,“没事儿,我是一个程序员”。
那妇女说,“这又怎样?”
程序员说,“我们从来不关心 Warning,只关心 Error”