星辰日月00

欲多则心散,心散则志衰,志衰则思不达也!

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

视图是通对一个或多个表定义查询得到的,视图定义所依据的表被称为基表。
视图是由表导出的“表”,因此视图是一个“虚”表。使用某些视图还可以对基
表进行DML操作。
利用视图可以简化查询语句的构成,降低查询的复杂性。
一、建立视图
语法格式:
 CREATE [OR REPLACE] VIEW view_name  --[OR REPLACE]说明如果名为view_name的视图已经存在,就替换它。
  AS subquery [WITH READ ONLY];   --[WITH READ ONLY]指定该视图为只读视图,只能用于检索。
--视图是由subquery定义的。根据subquery的复杂程度,视图可以是基于一个表的简单视图,也可以基于多个表。
CREATE VIEW departments_view AS
 SELECT * FROM departments;
CREATE VIEW students_view AS
 SELECT * FROM students
  WHERE sex = '男';
CREATE VIEW teachers_view AS
 SELECT teacher_id, name, bonus, wage
  FROM teachers
  WHERE title = '教授';
CREATE VIEW teachers_view2 AS
 SELECT t.teacher_id, t.name, d.department_name
  FROM teachers t, departments d
  WHERE t.department_id = d.department_id;

二、使用视图
视图建立以后,就可以通过它访问基表了。对于只读视图只能执行查询操作;
对于非只读视图不仅能执行查询操作,还能执行插入、修改、删除等DML操作。
1.查询视图
SELECT * FROM departments_view;
SELECT student_id, name, dob
 FROM students_view;
SELECT teacher_id, name, title, department_id
  FROM teachers_view1
 WHERE title = '讲师';
2.插入数据
--注意,只读视图不支持插入操作
INSERT INTO students_view
 VALUES(10177, NULL, '李石强', '男', '07-1月-1989', '计算机');
INSERT INTO teachers_view
 VALUES(10168, '孔夫子', 1000 ,3000);
3.修改数据
--注意,只读视图不支持修改操作
UPDATE students_view
  SET dob = '07-2月-1989'
 WHERE student_id = 10177;
4.删除数据
--注意,只读视图不支持删除操作
DELETE FROM students_view
 WHERE student_id = 10177;
 
三、获得视图定义信息
DESCRIBE students_view;
SELECT view_name, text_length, text FROM user_views;

四、修改视图
--在建立视图语句指定可选项[OR REPLACE], 可以达到修改视图的目的。
CREATE OR REPLACE VIEW student_view AS
 SELECT student_id, name, specialty
  FROM students
  WHERE sex = '男';
 
五、删除视图
语法格式:
 DROP VIEW view_name;
DROP VIEW departments_view;

posted on 2012-03-16 09:15  星辰日月00  阅读(262)  评论(0编辑  收藏  举报