1. 創建視圖 1.1 創建視圖的語法形式 1.2 在單表上創建視圖 例1:在t表格上創建一個名為view_t的視圖: 預設情況下創建的視圖和基本表的欄位是一樣的,也可以通過指定視圖欄位的名稱還創建視圖。 例2:在t表格上創建一個名為view_t2的視圖: qty 1.3 在多表上創建視圖 MySQ ...
1. 創建視圖
1.1 創建視圖的語法形式
CREATE [OR REPALCE][ALGORITHM = {UNSIGNED|MERGE|TEMPTABLE}] VIEW view_name[(column_list)] AS SELECT_statement [WITH[CASCADED|LOCAL|CHECK OPTION]] #CREATE 創建新的視圖; #REPLACE 替換已經創建的視圖 #ALGORITHM表示視圖選擇的演算法; #view_name:視圖的名稱 #column_list:屬性列 #SELECT_statement:SELECT語句 #WITH[CASCADED|LOCAL] CHECK OPTION:視圖更新時保證在視圖的許可權範圍之內
1.2 在單表上創建視圖
例1:在t表格上創建一個名為view_t的視圖:
#創建基本表並插入數據 create table t(quantity int,price int); insert into t values(3,50); #創建視圖語句為: create view view_t as select quantity,price,quantity*price from t;
quantity | price | quantity*price |
3 | 50 | 150 |
預設情況下創建的視圖和基本表的欄位是一樣的,也可以通過指定視圖欄位的名稱還創建視圖。
例2:在t表格上創建一個名為view_t2的視圖:
1 create view view_t2(qty,price,total) as select quantity,price,quantity*price from t; 2 select * from view_t2;
qty |
price | total |
3 | 50 | 150 |
1.3 在多表上創建視圖
MySQL中也可以在兩個或者兩個以上的表上創建視圖,可以使用CREATE VIEW語句實現。
1 #在表student和表stu_info上創建視圖stu_glass,代碼如下: 2 insert into student values(1,'wanglin1'),(2,'gaoli'),(3,'zhanghai'); 3 insert into stu_info values(1,'wuban','henan'),(2,'liuban','hebei'),(3,'qiban','shandong'); 4 #創建視圖stu_glass,語句如下: 5 CREATE VIEW stu_glass ( id, name, glass ) AS SELECT 6 student.s_id, 7 student.name, 8 stu_info.glass 9 FROM 10 student, 11 stu_info 12 WHERE 13 student.s_id = stu_info.s_id; 14 #查看視圖 15 select * from stu_glass;
這個例子就解決了剛開始提出的那個問題,通過這個視圖可以很好的保護基本表中的數據。這個視圖中的信息很簡單,只包含了id,姓名和班級,id欄位對應student表中的s_id欄位,name對應student表中的name欄位,glass對應sttu_info表中的glass欄位。
2. 查看視圖
2.1 DESCRIBE 語句查看視圖的基本信息
1 #通過DESCRIBE語句查看視圖view_t的定義 2 DESCRIBE view_t;
結果顯示出了視圖的欄位定義、欄位的數據類型、是否為空、是否為主/外鍵、預設值和額外信息。
DESCRIBE一般情況下都簡寫為DESC,輸入這個命令的執行結果和輸入DESCRIBE的執行結果是一樣的。
2.2 SHOW TABLE STATUS 語句查看視圖基本信息
1 #通過SHOW TABLE STATUS命令查看視圖信息 2 show table status like 'view_t';
2.3 SHOW CREARE VIEW 語句查看視圖詳細信息
1 #SHOW CREATE VIEW 語句可以查看視圖詳細定義 2 show create view view_t;
2.4 在views表中查看視圖詳細信息
1 #在MySQL中,information_schema資料庫下的views表中存儲了所有視圖的定義。通過對views表的查詢,可以查看資料庫中的所有視圖的詳細信息,查詢語句如下: 2 SELECT * FROM information_schema.VIEWS;
3. 修改視圖
3.1 CREATE OR REPLACE VIEW 語句修改視圖
1 #MySQL中如果要修改視圖,使用CREATE OR REPLACE VIEW語句: 2 CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED|MERGE|TEMPTABLE}] 3 VIEW view_name[(column_list)] 4 AS SELECT_statement 5 [WITH[CASCADED|LOCAL]CHECK OPTION]
3.2 ALTER 語句修改視圖
1 ALTER[ALGORITHM = {UNDEFINED|MERGE|TEMPTABLE}] 2 VIEW view_name[(column_list)] 3 AS SELECT_statement 4 [WITH[CASCADED|LOCAL]CHECK OPTION]
4. 更新視圖
#使用UPDATE語句更新視圖view_t: update view_t set quantity = 5; select * from view_t; +----------+ | quantity | +----------+ | 5 | +----------+
1 #使用INSERT 語句在基本表t中插入了一條記錄: 2 insert into t values(3,5); 3 select * from t; 4 select * from view_t2; 5 +-----+-------+-------+ 6 | qty | price | total | 7 +-----+-------+-------+ 8 | 5 | 50 | 250 | 9 | 3 | 5 | 15 | 10 +-----+-------+-------+ 11 2 rows in set (0.02 sec)
向表t中插入一條記錄,通過select查看表t和視圖view_t2,可以看到其中的內容也跟著更新,視圖更新的不僅僅是數量和單價,總價也會更新。
1 #使用delete語句在刪除視圖view_t2中的一條記錄: 2 delete from view_t2 where price = 5; 3 select * from view_t2; 4 +-----+-------+-------+ 5 | qty | price | total | 6 +-----+-------+-------+ 7 | 5 | 50 | 250 | 8 +-----+-------+-------+ 9 1 row in set (0.02 sec) 10 11 select * from t; 12 +----------+-------+ 13 | quantity | price | 14 +----------+-------+ 15 | 5 | 50 | 16 +----------+-------+ 17 1 row in set (0.03 sec)
5. 刪除視圖
當視圖不再需要時,可以將其刪除,刪除一個或多個視圖可以使用DROP VIEW語句:
語法如下:
DROP VIEW[IF EXISTS] view_name[,view_name]... [RESTRICT|CASCADE]
例:刪除stu_glass視圖
1 drop view if exists stu_glass; 2 Query OK, 0 rows affected (0.00 sec)