視圖
通過對視圖的操作不僅可以實現查詢的簡化,而且還會提高安全性視圖:本質是一種虛擬表,其內容和真實表相似,包含一系列帶有名稱的列和行數據。但是,視圖並不在數據庫中以存儲數據值的形式存在。行和列數據來自定義視圖的查詢所引用基本表,並且在具體引用視圖時動態生成。視圖使程序員只關心感興趣的某些特定數據和他們所負責的特定任務。這樣程序員只能看到視圖所定義的數據而不是視圖所引用表中的數據。從而提高了數據庫中數據逇安全性。
特點:
1、視圖的列可以來自不同的表,是表的抽象和在邏輯意義上建立的新關系
2、視圖由基本表(實表)產生的表(虛表)
3、視圖的建立和刪除不影響基本表
4、對視圖內容的更新(添加,刪除,修改)直接影響基本表
5、當視圖來自多個表時,不允許添加刪除數據(這個應該好理解,因為牽涉到了多個表,顯然刪除,添加都是不方便的或者說不安全的)
創建
create view viewname例:
create table t_product(
id int,
name varchar(20),
price float
)//創建視圖
create view view_product as select id,product from t_product
失敗了,原來定義成了name,改一下屬性
alter table t_product change name product varchar(20);
再次創建視圖,OK
select * from view_product
OK,這樣就將price字段隱藏了。
視圖大家庭
由於視圖實際上是封裝查詢語句(可以想到吧),那麼是不是任何形式的查詢語句都可以封裝成視圖?
查詢視圖
常量查詢:
create view view_const as select 3.1415926;
聚合函數(COUNT MIN SUM MAX等)
create view view_fun as select count(name) from t_student
排序(ORDER BY)
CREATE VIEW view_order as select name from t_student order by id DESC
內連接查詢語句
create view view_join as select s.name from t_student as s,t_group as g where s.group_id=g.id and g.id=2
外連接(left join 和 right join)
create view view_left as select s.name from t_student as s left join t_group as g on s.group_id=g.id where g.id=2
子查詢
create view view_child as select s.name from t_student as s where s.group_id in (select id from t_group)
記錄聯合(union 和 union all)
create view view_union as select id,name from t_student union all select id,name from t_group
查看視圖
show tables ,show table status(由於view是一個特殊的表,所以查看表也就可以查看到view), show create view viewname
1、show table status like "view_product"\G
以上面創建的view_product為例
2、show create view view_product\G
查看視圖的定義
3、describe|desc
desc viewname
刪除視圖
drop viewname[,viewname,...]
可以一次刪除多個view
修改視圖
1、create or replace view view_name
以view_product為例
現在想要隱藏id字段。
a、可以先刪除視圖,重新創建一個視圖
b、create or replace view viewname as
如:create or replace view view_product as select id from t_product
這樣就不需要先刪除在創建
2、alter語句(猜著就有)
alter view viewname
as 查詢語句