真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

什么是MySQL視圖及如何操作

本文主要給大家介紹什么是MySQL視圖及如何操作,文章內(nèi)容都是筆者用心摘選和編輯的,具有一定的針對(duì)性,對(duì)大家的參考意義還是比較大的,下面跟筆者一起了解下什么是MySQL視圖及如何操作吧。

10年積累的成都網(wǎng)站制作、成都做網(wǎng)站經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有鐵嶺縣免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

1、準(zhǔn)備工作

在MySQL數(shù)據(jù)庫(kù)中創(chuàng)建兩張表balance(余額表)和customer(客戶表)并插入數(shù)據(jù)。

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條數(shù)據(jù)。

insert into customer values(0001,"xiaoming",'vip1','12566666','male','江寧區(qū)888號(hào)');
insert into customer values(0002,"xiaohong",'vip10','15209336760','male','建鄴區(qū)888號(hào)');
insert into customer values(0003,"xiaocui",'vip11','15309336760','female','新街口888號(hào)');

insert into balance values(1,0001,900.55);
insert into balance values(2,0002,900.55);
insert into balance values(3,0003,10000);

2、視圖簡(jiǎn)介

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

a、提升真實(shí)表的安全性:視圖是虛擬的,可以只授予用戶視圖的權(quán)限而不授予真實(shí)表的權(quán)限,起到保護(hù)真實(shí)表的作用。
b、定制化展示數(shù)據(jù):基于同樣的實(shí)際表,可以通過(guò)不同的視圖來(lái)向不同需求的用戶定制化展示數(shù)據(jù)。
c、簡(jiǎn)化數(shù)據(jù)操作:適用于查詢語(yǔ)句比較復(fù)雜使用頻率較高的場(chǎng)景,可以通過(guò)視圖來(lái)實(shí)現(xiàn)。
......

需要說(shuō)明一點(diǎn)的是:視圖相關(guān)的操作需要用戶具備相應(yīng)的權(quán)限。以下操作使用root用戶,默認(rèn)用戶具備操作權(quán)限。

創(chuàng)建視圖語(yǔ)法
create view <視圖名稱>  as ;
修改視圖語(yǔ)法

修改視圖名稱可以先刪除,再用相同的語(yǔ)句創(chuàng)建。

#更新視圖結(jié)構(gòu)
alter view <視圖名稱>  as ;
#更新視圖數(shù)據(jù)相當(dāng)于更新實(shí)際表,不適用基于多表創(chuàng)建的視圖
update ....

注意:部分視圖的數(shù)據(jù)是無(wú)法更新,也就是無(wú)法使用update,insert等語(yǔ)句更新,比如:

a、select語(yǔ)句包含多個(gè)表
b、視圖中包含having子句
c、試圖中包含distinct關(guān)鍵字
......

刪除視圖語(yǔ)法
drop view <視圖名稱>

3、視圖的操作

基于單表創(chuàng)建視圖
mysql> create view  bal_view 
    -> as
    -> select * from  balance;
Query OK, 0 rows affected (0.22 sec)

創(chuàng)建完成后,查看bal_view的結(jié)構(gòu)和記錄??梢园l(fā)現(xiàn)通過(guò)視圖查詢到數(shù)據(jù)和通過(guò)真實(shí)表查詢得到的結(jié)果完全一樣。

#查詢bal_view的結(jié)構(gòu)
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)

通過(guò)創(chuàng)建視圖的語(yǔ)句不難得出結(jié)論:當(dāng)真實(shí)表中的數(shù)據(jù)發(fā)生改變時(shí),視圖中的數(shù)據(jù)也會(huì)隨之改變。那么當(dāng)視圖中的數(shù)據(jù)發(fā)生改變時(shí),真實(shí)表中的數(shù)據(jù)會(huì)變化嗎?來(lái)實(shí)驗(yàn)一下,修改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

來(lái)看一下真實(shí)表balance中的數(shù)據(jù)。

mysql> select  * from bal_view where id=1;
+----+------------+---------+
| id | customerId | balance |
+----+------------+---------+
|  1 |          1 | 2000.00 |
+----+------------+---------+
1 row in set (0.03 sec)

結(jié)論:視圖表中的數(shù)據(jù)發(fā)生變化時(shí),真實(shí)表中的數(shù)據(jù)也會(huì)隨之改變。

基于多表創(chuàng)建視圖

創(chuàng)建視圖cus_bal,共兩個(gè)字段客戶名稱和余額。

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中的數(shù)據(jù)
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)
#查看修改后視圖結(jié)構(gòu)。
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)

修改基于多表創(chuàng)建的視圖

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)

看完以上關(guān)于什么是MySQL視圖及如何操作,很多讀者朋友肯定多少有一定的了解,如需獲取更多的行業(yè)知識(shí)信息 ,可以持續(xù)關(guān)注我們的行業(yè)資訊欄目的。


網(wǎng)站標(biāo)題:什么是MySQL視圖及如何操作
文章網(wǎng)址:http://weahome.cn/article/gojsoj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部