视图的学习总结
1.視圖的簡介
???????? mysql 支持兩種表;基本表和視圖,基本表都是使用create table語句創建的,并且是唯一的存儲數據的表,而視圖只是把基本表中的數據組織起來構成一個“虛擬”表的一種命令或者形式,之所以說“虛擬的”,就是因為只用當視圖用于一條語句中的時候,他才能存在。mysql獲取構成視圖公式的命令,執行它,并且像一個真實的表那樣顯示給用戶。
2.視圖的創建
create view towns
select distinct town
from players
一個視圖的內容并沒有被存儲,而是當視圖被引用的時候派生了,這就是說嘛,根據定義,視圖的內容和基本表的內容一樣,對基本的表的更新,就可以再視圖中立即看到,用戶就不用擔心視圖內容的完整性,只要維護基本表的完整性。
注意:可以在一個視圖公式中聲明另一個視圖,也就是說視圖可以嵌套。
3.更新視圖
如果視圖中包含了with? check option 字句,使用update,insert和delete對視圖做出的所用改變都將進行有效性的檢查:
注意:前七個是適合更新的,
更新的視圖中的調節進行相關的檢查,cascaded是默認的。
?
?
drop? view用來刪除視圖,通過使用drop view,引用了被刪除的視圖的所用的其他視圖也會自動被刪除,當刪除一個基本表的時候,直接或者間接地定義在這表的所用的視圖也被刪除了。
例如: drop view towns
視圖可以用在各種應用程序中
5.1例程語句的簡化
例如
select *
from playerno
where playerno in
(select playerno
from penalties
???????? )
and town=’straford’
和
select town,count(*)
from players
where playerno in
???????? ( select playerno
???????? from penalties
)
group br town
這兩條都使用至少引發一次罰款的球員,因此,可以用一個視圖來定義這條語句
create view pplayers as
select *
from playeron
where playerno in
???????? (select playerno
???????? from penalties)
這樣都可以簡化前面的語句了
5.2?? select 語句的分部編寫
例子:對于來自stratford中的每個球員,如果他曾經引發一次罰款,并且罰款額比那些2號球隊打比賽的球員以及為一只first分級的球隊打過一場比賽的球員的平均罰款要高的話,那么就獲取他的名字和首字母
create view greater as
select distinct playerno
from penalties
where amount >
(select avg(amout)
from penalties
where? palayeron in
(select playerno
from matches
where teamno=2)
)
在創建一個視圖。其中包括了那些為first分級的一支球隊比賽過的所用球員
create view frist as
select distinct playerno
from match
where teamno in(
select teamno in
(select teamno
from teams
where divison=’first’))
?使用這兩個視圖,很輕松的回答了問題
select nam,initials
from players
where town=’stratford’
and playerno in(select playerno
from greater)
and playerno in
(select playerno
from? first)
5.3?? 數據的安全性
視圖可以用來保護表的一部分
轉載于:https://www.cnblogs.com/hylaz/archive/2012/11/05/2756041.html
總結
- 上一篇: 轻松学MVC4.0–2 创建用户列表页面
- 下一篇: 前端开发利器webStorm 3.0配置