日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql 视图 教程_MySQL视图简介及基本操作教程

發布時間:2025/3/11 数据库 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 视图 教程_MySQL视图简介及基本操作教程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

視圖是數據庫系統中一種非常有用的數據庫對象。MySQL 5.0 之后的版本添加了對視圖的支持。

認識視圖

視圖是一個虛擬表,其內容由查詢定義。同真實表一樣,視圖包含一系列帶有名稱的列和行數據,但視圖并不是數據庫真實存儲的數據表。

視圖是從一個、多個表或者視圖中導出的表,包含一系列帶有名稱的數據列和若干條數據行。

視圖并不同于數據表,它們的區別在于以下幾點:

視圖不是數據庫中真實的表,而是一張虛擬表,其結構和數據是建立在對數據中真實表的查詢基礎上的。

存儲在數據庫中的查詢操作 SQL 語句定義了視圖的內容,列數據和行數據來自于視圖查詢所引用的實際表,引用視圖時動態生成這些數據。

視圖沒有實際的物理記錄,不是以數據集的形式存儲在數據庫中的,它所對應的數據實際上是存儲在視圖所引用的真實表中的。

視圖是數據的窗口,而表是內容。表是實際數據的存放單位,而視圖只是以不同的顯示方式展示數據,其數據來源還是實際表。

視圖是查看數據表的一種方法,可以查詢數據表中某些字段構成的數據,只是一些 SQL 語句的集合。從安全的角度來看,視圖的數據安全性更高,使用視圖的用戶不接觸數據表,不知道表結構。

視圖的建立和刪除只影響視圖本身,不影響對應的基本表。

視圖與表在本質上雖然不相同,但視圖經過定義以后,結構形式和表一樣,可以進行查詢、修改、更新和刪除等操作。

1、準備工作

在MySQL數據庫中創建兩張表balance(余額表)和customer(客戶表)并插入數據。

create table customer(

id int(10) primary key,

name char(20) not null,

role char(20) not null,

phone char(20) not null,

sex char(10) not null,

address char(50) not null

)ENGINE=InnoDB DEFAULT CHARSET=utf8;

#外鍵為customerId

create table balance(

id int(10) primary key,

customerId int(10) not null,

balance DECIMAL(10,2),

foreign key(customerId) references customer(id)

)ENGINE=InnoDB DEFAULT CHARSET=utf8;

向客戶表和余額表中各插入3條數據。

insert into customer values(0001,"xiaoming",'vip1','12566666','male','江寧區888號');

insert into customer values(0002,"xiaohong",'vip10','15209336760','male','建鄴區888號');

insert into customer values(0003,"xiaocui",'vip11','15309336760','female','新街口888號');

insert into balance values(1,0001,900.55);

insert into balance values(2,0002,900.55);

insert into balance values(3,0003,10000);

2、視圖簡介

視圖可以簡單理解成虛擬表,它和數據庫中真實存在數據表不同,視圖中的數據是基于真實表查詢得到的。視圖和真實表一樣具備相似的結構。真實表的更新,查詢,刪除等操作,視圖也支持。那么為什么需要視圖呢?

a、提升真實表的安全性:視圖是虛擬的,可以只授予用戶視圖的權限而不授予真實表的權限,起到保護真實表的作用。

b、定制化展示數據:基于同樣的實際表,可以通過不同的視圖來向不同需求的用戶定制化展示數據。

c、簡化數據操作:適用于查詢語句比較復雜使用頻率較高的場景,可以通過視圖來實現。

......

需要說明一點的是:視圖相關的操作需要用戶具備相應的權限。以下操作使用root用戶,默認用戶具備操作權限。

創建視圖語法

create view ? as ;

修改視圖語法

修改視圖名稱可以先刪除,再用相同的語句創建。

#更新視圖結構

alter view as ;

#更新視圖數據相當于更新實際表,不適用基于多表創建的視圖

update ....

注意:部分視圖的數據是無法更新,也就是無法使用update,insert等語句更新,比如:

a、select語句包含多個表

b、視圖中包含having子句

c、試圖中包含distinct關鍵字

......

刪除視圖語法

drop view

3、視圖的操作

基于單表創建視圖

mysql> create view bal_view

-> as

-> select * from balance;

Query OK, 0 rows affected (0.22 sec)

創建完成后,查看bal_view的結構和記錄。可以發現通過視圖查詢到數據和通過真實表查詢得到的結果完全一樣。

#查詢bal_view的結構

mysql> desc bal_view;

+------------+---------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+------------+---------------+------+-----+---------+-------+

| id | int(10) | NO | | NULL | |

| customerId | int(10) | NO | | NULL | |

| balance | decimal(10,2) | YES | | NULL | |

+------------+---------------+------+-----+---------+-------+

3 rows in set (0.07 sec)

#查詢bal_view中的記錄

mysql> select * from bal_view;

+----+------------+----------+

| id | customerId | balance |

+----+------------+----------+

| 1 | 1 | 900.55 |

| 2 | 2 | 900.55 |

| 3 | 3 | 10000.00 |

+----+------------+----------+

3 rows in set (0.01 sec)

通過創建視圖的語句不難得出結論:當真實表中的數據發生改變時,視圖中的數據也會隨之改變。那么當視圖中的數據發生改變時,真實表中的數據會變化嗎?來實驗一下,修改id=1的客戶balance為2000。

mysql> update bal_view set balance=2000 where id=1;

Query OK, 1 row affected (0.05 sec)

Rows matched: 1 Changed: 1 Warnings: 0

來看一下真實表balance中的數據。

mysql> select * from bal_view where id=1;

+----+------------+---------+

| id | customerId | balance |

+----+------------+---------+

| 1 | 1 | 2000.00 |

+----+------------+---------+

1 row in set (0.03 sec)

結論:視圖表中的數據發生變化時,真實表中的數據也會隨之改變。

基于多表創建視圖

創建視圖cus_bal,共兩個字段客戶名稱和余額。

mysql> create view cus_bal

-> (cname,bal)

-> as

-> select customer.name,balance.balance from customer ,balance

-> where customer.id=balance.customerId;

Query OK, 0 rows affected (0.05 sec)

#查看cus_bal中的數據

mysql> select * from cus_bal;

+----------+----------+

| cname | bal |

+----------+----------+

| xiaoming | 2000.00 |

| xiaohong | 900.55 |

| xiaocui | 10000.00 |

+----------+----------+

3 rows in set (0.28 sec)

修改視圖

將cus_bal視圖中的cname改成cusname。

mysql> alter view cus_bal

-> (cusname,bal)

-> as

-> select customer.name,balance.balance from customer ,balance

-> where customer.id=balance.customerId;

Query OK, 0 rows affected (0.06 sec)

#查看修改后視圖結構。

mysql> desc cus_bal;

+---------+---------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+---------+---------------+------+-----+---------+-------+

| cusname | char(20) | NO | | NULL | |

| bal | decimal(10,2) | YES | | NULL | |

+---------+---------------+------+-----+---------+-------+

2 rows in set (0.00 sec)

修改基于多表創建的視圖

mysql> insert into cus_bal(cusname,bal) values ("ee",11);

ERROR 1393 (HY000): Can not modify more than one base table through a join view 'rms.cus_bal'

刪除視圖

刪除視圖cus_bal

drop view cus_bal;

mysql> drop view cus_bal;

Query OK, 0 rows affected (0.00 sec)

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。

您可能感興趣的文章:MySQL筆記之視圖的使用詳解

MySQL中視圖的使用及多表INNER JOIN的技巧分享

MySQL中索引與視圖的用法與區別詳解

mysql觸發器實現oracle物化視圖示例代碼

基于mysql事務、視圖、存儲過程、觸發器的應用分析

mysql視圖原理與用法實例小結

詳解Mysql中的視圖

Mysql事項,視圖,函數,觸發器命令(詳解)

MySQL視圖原理與基本操作示例

mysql視圖功能與用法實例分析

總結

以上是生活随笔為你收集整理的mysql 视图 教程_MySQL视图简介及基本操作教程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。