91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Mysql之數據庫視圖

發布時間:2020-07-15 12:21:43 來源:網絡 閱讀:701 作者:一葉扁舟丶 欄目:MySQL數據庫

Mysql之數據庫視圖

        數據庫中的視圖是一個虛擬表。同真實表一樣,包含行和列數據,行和列的數據來自 定義視圖查詢所引用的表,并且在引用視圖時動態生成。可以隔離用戶與數據保持安全,且快速查詢數據。

        Mysql5.0后版本支持視圖,可以使用select、insert into、update、delete等。無論修改基本表還是視圖都對應發生變化。

視圖的作用:

比直接從數據表中讀取相比:

1、簡化了:看到的就是需要的。

2、安全性:通過視圖用戶只能查詢和修改他們所能看到的數據。其他數據看不到也取不到。

3、邏輯數據獨立性:視圖可以幫助用戶屏蔽真實表結構變化帶來的影響。


創建視圖:

視圖包含了select查詢的結果,因此視圖的創建基于select語句和已存在的數據表,視圖可以建立在一張表上,也可以建立在多張表上。

語法:

create [or replace] [algorithm = {undefined | merge | temptable }]
view view_name [(column_list)]
as select_statment
[with [cascaded | local] check option]
create    # 創建視圖
replace   # 替換視圖
algorithm  # 視圖算法:undefined系統自己選擇算法;merge表示視圖語句與視圖定義合并,使視圖定義部分替代語句對應部分;temptable表示將視圖結果存入臨時表,用臨時表來執行語句。
view_name  # 視圖名稱
column_list     # 屬性列
select_statment   # select語句
[with [cascaded | local] check option]    # 表示權限范圍之內:cascaded表示滿足所有條件。local表示更新時滿足視圖本身條件即可。

單表創建視圖:

mysql> create database view;
mysql> use view;
mysql> create table t (quantity INT,price INT);
mysql> insert into t values(3,50);
mysql> create view view_t as select quantity,price,quantity * price from t;
mysql> select * from view_t;

# 默認情況下創建的視圖和基本表的字段一樣,也可以通過指定視圖字段的名稱來創建視圖。

mysql> create view view_t2(qty,price,total) as select quantity,price,quantity * price from t;
mysql> select * from view_t2;

# view_t和view_t2兩個視圖中的字段名稱不同,但是數據卻是相同的。因此在使用視圖的時候,可能用戶根本就不需要了解表的機構,更接觸不到實際表中的數據,從而保證了數據庫的安全。

在多表上創建視圖:

mysql> create database stud;
mysql> use stud;
mysql> create table student (id int,name char(20));
mysql> create table stu_info (id int,name char(20),addr char(20));
mysql> show tables;
mysql> insert into student values(1,'zhouyi'),(2,'zhaoer'),(3,'zhangsan');
mysql> insert into student values(1,'zhouyi','beijing'),(2,'zhaoer','shanghai'),(3,'zhangsan','chengdu');
mysql> select * from stu_info;
mysql> select * from student;
mysql> create view stu_glass(id,name,glass) as select student.id,student.name,stu_info.addr from student,stu_info where student.id=stu_info.id;
mysql> select * from stu_glass;

# 可以看出視圖id是student.id

# name是student.name

# glass是stu_info.addr

查看視圖:

mysql> show table status like 'stu_glass'\G;    # 全是NULL,Comment: VIEW表示虛表
mysql> desc stu_glass;    # 查看視圖基本信息
mysql> show create view stu_glass\G;     # 查看視圖創建信息
mysql> select * from information_schema.views\G;    # 查看詳細信息

修改視圖:

mysql> use view;
mysql> desc view_t;
mysql> alter view view_t as select quantity from t;

或者:
mysql> create or replace view view_t as select * from t;
mysql> desc view_t;


更新視圖:

mysql> alter view view_t as select quantity from t;  # 修改視圖和元數據不同
mysql> select * from view_t;
mysql> select * from t;
mysql> update view_t set quantity=5;
mysql> select * from view_t;
mysql> select * from view_t2;
mysql> select * from t;
# 全部更新

插入數據:

mysql> insert into t values (3,5);    # 插入數據
mysql> select * from view_t;
mysql> select * from view_t2;
mysql> select * from t;        # 全部插入


mysql> delete from view_t2 where price=5;	# 刪除view_t2視圖中price=5的數據;
mysql> select * from view_t2;
mysql> select * from t;
# 在view_t2中刪除price=5的操作最終是通過基本表中的相關記錄實現的。
注意:
當視圖中包含有如下內容時,視圖的更新操作將不被執行:
1、視圖中不包含基本表中被定義為非空的列;
2、在定義視圖的select語句后的字段列表中使用數學表達式;
3、在定義視圖的select語句后的字段列表中使用了聚合函數;
4、在定義視圖的select語句中使用了distinct、union、top、group、having子句。


刪除視圖:

mysql> drop view if exists view_t2;
mysql> show create view view_t2; 
ERROR 1146 (42S02): Table 'view.view_t2' doesn't exist


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

那曲县| 宜阳县| 建瓯市| 维西| 措勤县| 疏勒县| 秦安县| 咸宁市| 泉州市| 札达县| 呼玛县| 五指山市| 乌鲁木齐市| 松滋市| 四子王旗| 十堰市| 黎平县| 中江县| 子洲县| 丹巴县| 普宁市| 华容县| 蓝田县| 隆安县| 丹阳市| 乌拉特中旗| 长海县| 张北县| 泾川县| 临湘市| 吉木萨尔县| 喜德县| 莆田市| 青铜峡市| 武隆县| 彭泽县| 阿坝| 芦溪县| 车险| 正阳县| 从江县|