【1、什麼是視圖】
視圖是存放數據的一個接口,也可以說是虛擬表,這些數據可以是從一個或幾個基表(視圖)的數據,也可是用戶自己定義的數據,其實視圖裏面不存放數據,數據還是存在基表裏面,
基表數據發生變化,視圖裏的數據也隨之變化,視圖裏數據變化,基表也會變化。
【創建數據庫】
create database test;
create table student(
id int not null auto_increment primary key,
name varchar(30),
age int,
sex varchar(10),
email varchar(60),
phone char(20)
);
【插入數據】
insert into student(name,age,sex,email,phone) values('zhangsan',10,'nan','[email protected]','123456789');
insert into student(name,age,sex,email,phone) values('lisi',20,'nv','[email protected]','435345345');
insert into student(name,age,sex,email,phone) values('wangwu',30, 'nv','[email protected]','5555555');
insert into student(name,age,sex,email,phone) values('admin',50, 'nv','[email protected]','6666666');
【創建視圖】
create view student_view as select * from student;
【查詢視圖中數據】
select * from student_view;
【基表—視圖 互相變化(增、刪、改 操作)】
insert into student_view(name,age,sex,email,phone) values('hello',33, 'nan','[email protected]','99999999');
【此時,查詢表student和視圖student_view中結果是一樣的】
select * from student_view;
select * from student;
【2、視圖的作用】
1. 視圖可以讓查詢變得很清楚(複雜的SQL語句變得很簡單)
2. 保護數據庫的重要數據, 給不同的人看不同的數據
【創建學生成績表】
create table score(
id int not null auto_increment primary key,
sid int,
phpc double,
javac double,
oraclec double
);
【插入數據】
insert into score(sid,phpc,javac,oraclec) values(1,88,77,66);
insert into score(sid,phpc,javac,oraclec) values(2,99,57,76);
insert into score(sid,phpc,javac,oraclec) values(3,55,37,96);
insert into score(sid,phpc,javac,oraclec) values(4,35,87,96);
insert into score(sid,phpc,javac,oraclec) values(5,99,85,36);
insert into score(sid,phpc,javac,oraclec) values(6,49,25,36);
【查詢數據】
【普通的多表查詢:zhangsan的name、age、email、phpc、javac】
select a.name,a.age,a.email,a.phone,b.phpc,b.javac,b.oraclec from student a,score b where a.id=b.sid;
【創建視圖查詢上面的結果】
create view stuc as select a.name,a.age,a.email,a.phone,b.phpc,b.javac,b.oraclec from student a,score b where a.id=b.sid;
select * from stuc;
【可以對該視圖進行其他SQL查詢操作】
Select name,age,phpc from stuc where phpc>70;
【3、創建視圖】
語法:
create [or replace] [algorithm={merge|temptable|undefined}]
view view_name [(column_list)]
as select_statement
[with [cascaded|local] check option]
示例:
Create or replace view stu3(stu_name,stu_age,stu_sex)
as select name,age,sex from student where age>40;
Select * from stu3;
視圖有三種類型:algorithm={merge|temptable|undefined}:Merge: 會將引用視圖的語句的文本與視圖定義結合起來,使得視圖定義的某一部分取代語句的對應部分
with local check option:[local]只要滿足本視圖的條件就可以更新;with cascaded check option:[cascaded]則是必須滿足所有針對視圖的條件,纔可以更新。
【4、更改視圖】(其實有了[or replace]就可以不用這個了)
alter [or replace] [algorithm={merge|temptable|undefined}]
view view_name [(column_list)]
as select_statement
[with [cascaded|local] check option]
【5、刪除視圖】
Drop view stu3;(刪除單個)
Drop view stu3,stuc,student_view;(刪除多個)
【6、查看創建視圖的語句】
show create table student;
show create view stuc;
查詢系統庫中全部的視圖:
Select * from information_schema.views;
【視圖】
15.創建視圖:CREATE VIEW
16.修改視圖:ALTER VIEW
17.使用DROP VIEW 語句可刪除一個或多個數據內存在的視圖:
18.查看創建視圖的語法:使用 SHOW CREATE VIEW 語句