MySQL 視圖使用初探

<一> 視圖

1.優勢

  • 視點集中sql

  • 簡化操做數據庫

  • 定製數據安全

  • 合併分割數據app

  • 安全性spa

2.爲何須要視圖?

  視圖是存儲在數據庫中的查詢的sql 語句,它主要出於兩種緣由:code

  • 安全緣由,視圖能夠隱藏一些數據,如社會保險基金錶,能夠用視圖只顯示姓名,地址,而不顯示社會保險號和工資數等,htm

  • 可以使複雜的查詢易於理解和使用。get

3.建立視圖的語法

CREATE VIEW view_name 
    AS
        SELECT column_name(s)
        FROM table_name
        WHERE condition

[注]:視圖老是顯示最近的數據。每當用戶查詢視圖時,數據庫引擎經過使用 SQL 語句來重建數據。qt

4.更新視圖的語法

CREATE OR REPLACE VIEW view_name 
    AS
        SELECT column_name(s)
        FROM table_name
        WHERE condition

5.刪除視圖的語法

DROP VIEW view_name


<二>例子

1.建立兩張表,並插入數據

product 表it

create table product  
(  
product_id int not null,  
name varchar(50) not null,  
price double not null  
);  
insert into product values(1, 'apple ', 5.5);

purchase 表

create table purchase  
(  
id int not null,  
product_id int not null,  
qty int not null default 0,  
gen_time datetime not null  
);  
insert into purchase values(1, 1, 10, now());

2.建立視圖:

create view purchase_detail as 
	select product.name as name, product.price as price, purchase.qty as qty, 
	product.price * purchase.qty as total_value
	from product, purchase 
	where product.product_id = purchase.product_id;

3.建立視圖後,查詢:

select * from purchase_detail;

4.結果:

<三>.建立視圖的注意事項

注意事項

  • 運行建立視圖的語句須要用戶具備建立視圖(crate view)的權限,若加了[or replace]時,還須要用戶具備刪除視圖(drop view)的權限;

  • select語句不能包含from子句中的子查詢;

  • select語句不能引用系統或用戶變量;

  •  select語句不能引用預處理語句參數;

  • 在存儲子程序內,定義不能引用子程序參數或局部變量;

  • 在定義中引用的表或視圖必須存在。可是,建立了MySQL視圖後,可以捨棄定義引用的表或視圖。要想檢查視圖定義是否存在這類問題,可以使用check table語句;

  • 在定義中不能引用temporary表,不能建立temporary視圖;

  •  在視圖定義中命名的表必須已存在;

  • 不能將觸發程序與視圖關聯在一塊兒;

  • 在視圖定義中容許使用order by,可是,若是從特定視圖進行了選擇,而該視圖使用了具備本身order by的語句,它將被忽略。

<四>.修改視圖

使用 alter view

alter view purchase_detail 
	as 
		select 
			product.name as name, 
			product.price as price, 
			product.price * purchase.qty as total_value 
		from 
			product, purchase 
		where 
		        product.product_id = purchase.product_id;

參考:http://database.51cto.com/art/201005/200526.htm

相關文章
相關標籤/搜索