1. 程式人生 > >sql——視圖

sql——視圖

-c from dem rom 們的 statement 馬雲 麻煩 pla

為什麽使用視圖

當我們在使用多表查詢時, 我們的sql語句可能會非常的復雜,如果每次都編寫一遍sql‘的話無疑是一件麻煩的事情,這時候就可以使用視圖來避免多次編寫sql的問題;

簡答的說可以幫我們節省sql的編寫,

視圖的另一個作用是,可以不同的視圖來展示開放不同數據的訪問

例如,同一張工資表,老板可以查看全部,部門主管可以查看該部門所有人,員工只能看自己的一條記錄。

使用方法

創建視圖

CREATE [OR REPLACE] VIEW view_name [(column_list)]
AS select_statement

加上or replace 時如果已經存在相同的視圖則替換原有視圖

column_list 指定那些字段要出現在視圖中

註意:由於視圖是一張虛擬表,視圖中的數據實際來源其他表,所以視圖中的數據不會出現在硬盤上。

使用視圖

視圖是一張虛擬表,所以使用正常的表沒有任何區別

查看視圖

1.desc view_name; 查看數據結構

2.show create view view_name; 查看創建語句

修改視圖

alter view_name as select_statement

刪除視圖

drop view view_name

實例

#準備數據
create database db02 charset utf8;
use db02
create table student(
  s_id 
int(3), name varchar(20), math float, chinese float ); insert into student values(1,tom,80,70),(2,jack,80,80),(3,rose,60,75); ? create table stu_info( s_id int(3), class varchar(50), addr varchar(100) ); insert into stu_info values(1,二班,安徽),(2,二班,湖南),(3,三班,黑龍江);

創建視圖

#創建視圖包含 編號 學生的姓名 和班級
create view view_stu (學號,姓名,班級) as
select student.s_id,student.name,stu_info.class from student join stu_info on student.s_id = stu_info.s_id;

查看創建的視圖
select * from view_stu;

案例2: 隔離數據

準備數據

create table salarys(
id int primary key,
name char(10),
salary double,
dept char(10)
);
insert into salarys values
(1,"劉強東",900000,"市場"),
(2,"馬雲",800090,"市場"),
(3,"李彥宏",989090,"財務"),
(4,"馬化騰",87879999,"財務");

創建市場部專用的工資視圖
create view view_shichang as
select * from salarys where dept = "市場";

查看視圖
select * from view_shichang;

同時註意:對視圖數據的insert update delete會同步到原表中,但是由於視圖可能是部分字段,很多時候會失敗。
修改原表中的數據,視圖的數據會隨之該表。這是建議修改數據的方式,不建議直接對視圖中的數據進行修改。

mysql> select * from view_shichang;
+----+--------+--------+------+
| id | name | salary | dept |
+----+--------+--------+------+
| 1 | 劉強東 | 900000 | 市場 |
| 2 | 馬雲 | 800090 | 市場 |
+----+--------+--------+------+

update salarys set salary = 10000 where name = "劉強東";

mysql> select * from view_shichang;
+----+--------+--------+------+
| id | name | salary | dept |
+----+--------+--------+------+
| 1 | 劉強東 | 10000 | 市場 |
| 2 | 馬雲 | 800090 | 市場 |
+----+--------+--------+------+

總結:mysql可以分擔程序中的部分邏輯,但這樣一來後續的維護會變得更麻煩

如果需要改表結構,那意味著視圖也需要相應的修改,沒有直接在程序中修改sql來的方便

sql——視圖