校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > mysql視圖之創建視圖(CREATE VIEW)和使用限制實例詳解

mysql視圖之創建視圖(CREATE VIEW)和使用限制實例詳解

熱門標簽:走過哪個省地圖標注 在哪里申請400電話 外呼系統電銷受騙 安徽ai電話電銷機器人有效果嗎 400電話申請信用卡 常州網絡外呼系統開發 萊西市地圖標注 巫師三血與酒地圖標注 銷售語音電話機器人

本文實例講述了mysql視圖之創建視圖(CREATE VIEW)和使用限制。分享給大家供大家參考,具體如下:

mysql5.x 版本之后支持數據庫視圖,在mysql中,視圖的幾乎特征符合SQL:2003標準。 mysql以兩種方式處理對視圖的查詢:

  • 第一種方式,MySQL會根據視圖定義語句創建一個臨時表,并在此臨時表上執行傳入查詢。
  • 第二種方式,MySQL將傳入查詢與查詢定義為一個查詢并執行組合查詢。

mysql支持版本系統的視圖,當每次視圖被更改或替換時,視圖的副本將在駐留在特定數據庫文件夾的arc(archive)文件夾中備份。備份文件的名稱為view_name.frm-00001。如果再次更改視圖,mysql將創建一個名為view_name.frm-00002的新備份文件。mysql允許基于其他視圖創建視圖,就是在視圖定義的select語句中,可以引用另一個視圖。

好啦,多的咱就不贅述了,接下來咱們嘗試使用CREATE VIEW語句創建視圖,先來看下語法結構:

CREATE 
  [ALGORITHM = {MERGE | TEMPTABLE | UNDEFINED}]
VIEW [database_name].[view_name] 
AS
[SELECT statement]

然后我們來詳細看下上面的sql中的各種詞是什么意思。首先,第一個中括號里代表的就是創建視圖是的算法屬性,它允許我們控制mysql在創建視圖時使用的機制,并且mysql提供了三種算法:MERGE,TEMPTABLE和UNDEFINED。我們來分別看下:

  • 使用MERGE算法,mysql首先將輸入查詢與定義視圖的select語句組合成單個查詢。 然后mysql執行組合查詢返回結果集。 如果select語句包含集合函數(如min,max,sum,count,avg等)或distinct,group by,havaing,limit,union,union all,子查詢,則不允許使用MERGE算法。 如果select語句無引用表,則也不允許使用MERGE算法。 如果不允許MERGE算法,mysql將算法更改為UNDEFINED。我們要注意,將視圖定義中的輸入查詢和查詢組合成一個查詢稱為視圖分辨率。
  • 使用TEMPTABLE算法,mysql首先根據定義視圖的SELECT語句創建一個臨時表,然后針對該臨時表執行輸入查詢。因為mysql必須創建臨時表來存儲結果集并將數據從基表移動到臨時表,所以TEMPTABLE算法的效率比MERGE算法效率低。 另外,使用TEMPTABLE算法的視圖是不可更新的。
  • 當我們創建視圖而不指定顯式算法時,UNDEFINED是默認算法。 UNDEFINED算法使mysql可以選擇使用MERGE或TEMPTABLE算法。mysql優先使用MERGE算法進行TEMPTABLE算法,因為MERGE算法效率更高。

然后就是view后面的詞組了,它就是名稱的意思,在數據庫中,視圖和表共享相同的命名空間,因此視圖和表不能具有相同的名稱。 另外,視圖的名稱必須遵循表的命名規則。

最后就是SELECT語句了。在SELECT語句中,可以從數據庫中存在的任何表或視圖查詢數據,同時SELECT語句必須遵循以下幾個規則:

  • SELECT語句可以在where 語句中包含子查詢,但FROM子句中的不能包含子查詢。
  • SELECT語句不能引用任何變量,包括局部變量,用戶變量和會話變量。
  • SELECT語句不能引用準備語句的參數。

在這里我們得稍稍注意下,SELECT語句不需要引用任何表。完事呢,我們來嘗試基于orderDetails表來創建一個表示每個訂單的總銷售額的視圖:

CREATE VIEW SalePerOrder AS
  SELECT 
    orderNumber, SUM(quantityOrdered * priceEach) total
  FROM
    orderDetails
  GROUP by orderNumber
  ORDER BY total DESC;

我們如果使用SHOW TABLES命令來查看示例數據庫(yiibaidb)中的所有表,還會看到SalesPerOrder視圖也顯示在表的列表中:

mysql> SHOW TABLES;
+--------------------+
| Tables_in_yiibaidb |
+--------------------+
| article_tags    |
| contacts      |
| customers     |
| departments    |
| employees     |
| offices      |
| offices_bk     |
| offices_usa    |
| orderdetails    |
| orders       |
| payments      |
| productlines    |
| products      |
| saleperorder    |
+--------------------+
14 rows in set

這是因為視圖和表共享相同的命名空間。要知道哪個對象是視圖或表,就得使用SHOW FULL TABLES命令,如下所示:

mysql> SHOW FULL TABLES;
+--------------------+------------+
| Tables_in_yiibaidb | Table_type |
+--------------------+------------+
| article_tags    | BASE TABLE |
| contacts      | BASE TABLE |
| customers     | BASE TABLE |
| departments    | BASE TABLE |
| employees     | BASE TABLE |
| offices      | BASE TABLE |
| offices_bk     | BASE TABLE |
| offices_usa    | BASE TABLE |
| orderdetails    | BASE TABLE |
| orders       | BASE TABLE |
| payments      | BASE TABLE |
| productlines    | BASE TABLE |
| products      | BASE TABLE |
| saleperorder    | VIEW    |
+--------------------+------------+
14 rows in set

結果集中的table_type列指定哪個對象是視圖,哪個對象是一個表(基表)。如上所示,saleperorder對應table_type列的值為:VIEW。然而,如果要查詢每個銷售訂單的總銷售額,只需要對SalePerOrder視圖執行一個簡單的SELECT語句,如下所示:

SELECT 
  *
FROM
  salePerOrder;

執行上面查詢語句,得到以下結果:

+-------------+----------+
| orderNumber | total  |
+-------------+----------+
|    10165 | 67392.85 |
|    10287 | 61402.00 |
|    10310 | 61234.67 |
|    10212 | 59830.55 |
|-- 此處省略了many many數據-- |
|    10116 | 1627.56 |
|    10158 | 1491.38 |
|    10144 | 1128.20 |
|    10408 | 615.45  |
+-------------+----------+
327 rows in set

我們再來基于另一個視圖創建一個視圖,比如,根據SalesPerOrder視圖創建名為大銷售訂單(BigSalesOrder)的視圖,以顯示總計大于60,000的每個銷售訂單,如下所示:

CREATE VIEW BigSalesOrder AS
  SELECT 
    orderNumber, ROUND(total,2) as total
  FROM
    saleperorder
  WHERE
    total > 60000;

現在,我們可以從BigSalesOrder視圖查詢數據,如下所示:

SELECT 
  orderNumber, total
FROM
  BigSalesOrder;

執行上面查詢語句,得到以下結果:

+-------------+----------+
| orderNumber | total  |
+-------------+----------+
|    10165 | 67392.85 |
|    10287 | 61402.00 |
|    10310 | 61234.67 |
+-------------+----------+
3 rows in set

完事我們再來嘗試使用inner join創建包含客戶編號和客戶支付的總金額的視圖,如下所示:

CREATE VIEW customerOrders AS
  SELECT 
    c.customerNumber,
    p.amount
  FROM
    customers c
      INNER JOIN
    payments p ON p.customerNumber = c.customerNumber
  GROUP BY c.customerNumber
  ORDER BY p.amount DESC;

我們使用下面的sql來查詢customerOrders視圖中的數據:

+----------------+-----------+
| customerNumber | amount  |
+----------------+-----------+
|      124 | 101244.59 |
|      321 | 85559.12 |
|      239 | 80375.24 |
| **** 此處省略了many many數據 ***|
|      219 | 3452.75  |
|      216 | 3101.4  |
|      161 | 2434.25  |
|      172 | 1960.8  |
+----------------+-----------+
98 rows in set

再來嘗試使用子查詢創建包含價格高于所有產品的平均價格的產品的視圖,如下所示:

CREATE VIEW aboveAvgProducts AS
  SELECT 
    productCode, productName, buyPrice
  FROM
    products
  WHERE
    buyPrice > 
 (SELECT 
        AVG(buyPrice)
      FROM
        products)
  ORDER BY buyPrice DESC;

我們來查詢aboveAvgProducts視圖的數據:

SELECT 
  *
FROM
  aboveAvgProducts;

執行上面查詢語句,得到以下結果:

+-------------+-----------------------------------------+----------+
| productCode | productName               | buyPrice |
+-------------+-----------------------------------------+----------+
| S10_4962  | 1962 LanciaA Delta 16V         | 103.42  |
| S18_2238  | 1998 Chrysler Plymouth Prowler     | 101.51  |
| S10_1949  | 1952 Alpine Renault 1300        | 98.58  |
|************* 此處省略了many many數據 *********************************|
| S18_3320  | 1917 Maxwell Touring Car        | 57.54  |
| S24_4258  | 1936 Chrysler Airflow          | 57.46  |
| S18_3233  | 1985 Toyota Supra            | 57.01  |
| S18_2870  | 1999 Indy 500 Monte Carlo SS      | 56.76  |
| S32_4485  | 1974 Ducati 350 Mk3 Desmo        | 56.13  |
| S12_4473  | 1957 Chevy Pickup            | 55.7   |
| S700_3167  | F/A 18 Hornet 1/72           | 54.4   |
+-------------+-----------------------------------------+----------+
54 rows in set

好啦,到這里了,視圖的創建和使用已經介紹的差不多了。但是,視圖就沒有什么使用的限制么?答案當然是有的,我們來分別看下。

首先,我們不能在視圖上創建索引,再來就是當使用合并算法的視圖查詢數據時,mysql會使用底層表的索引,還有就是對于使用誘惑算法的視圖,當我們針對視圖查詢數據時,不會使用索引。

還有就是要注意在mysql5.7.7之前版本,是不能在SELECT語句的FROM子句中使用子查詢來定義視圖的。

再來就是如果刪除或重命名視圖所基于的表,則mysql不會發出任何錯誤。但是,mysql會使視圖無效,我們可以使用CHECK TABLE語句來檢查視圖是否有效。

一個簡單的視圖可以更新表中數據,但是基于具有連接,子查詢等的復雜select語句創建的視圖無法更新。

mysql不像Oracle、PostgreSQL等其他數據庫系統那樣支持物理視圖,mysql是不支持物理視圖的。

好啦,關于視圖本次就記錄到這里了。

更多關于MySQL相關內容感興趣的讀者可查看本站專題:《MySQL查詢技巧大全》、《MySQL事務操作技巧匯總》、《MySQL存儲過程技巧大全》、《MySQL數據庫鎖相關技巧匯總》及《MySQL常用函數大匯總》

希望本文所述對大家MySQL數據庫計有所幫助。

您可能感興趣的文章:
  • MySQL如何創建視圖
  • 詳細分析mysql視圖的原理及使用方法
  • MySQL的視圖和索引用法與區別詳解
  • 淺談MySql 視圖、觸發器以及存儲過程
  • MySql視圖觸發器存儲過程詳解
  • mysql視圖原理與用法實例詳解
  • mysql視圖之管理視圖實例詳解【增刪改查操作】
  • mysql視圖之創建可更新視圖的方法詳解
  • MySQL中Update、select聯用操作單表、多表,及視圖與臨時表的區別
  • mysql三張表連接建立視圖
  • MySQL 視圖(View)原理解析

標簽:黃石 河北 果洛 煙臺 鞍山 來賓 赤峰 陽江

巨人網絡通訊聲明:本文標題《mysql視圖之創建視圖(CREATE VIEW)和使用限制實例詳解》,本文關鍵詞  mysql,視圖,之,創建,CREATE,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《mysql視圖之創建視圖(CREATE VIEW)和使用限制實例詳解》相關的同類信息!
  • 本頁收集關于mysql視圖之創建視圖(CREATE VIEW)和使用限制實例詳解的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    91官网在线免费观看| 久久99在线观看| 国产精品蜜臀在线观看| 美女诱惑一区二区| 欧美日韩视频一区二区| 中文字幕制服丝袜成人av| 成人综合婷婷国产精品久久蜜臀| 2020国产精品| 丝袜美腿一区二区三区| 91精品国产一区二区| 久久成人久久爱| 337p亚洲精品色噜噜| 韩日欧美一区二区三区| 国产女人aaa级久久久级| 日本丰满少妇一区二区三区| 日本成人在线电影网| 国产精品入口麻豆原神| 成人a区在线观看| 一区二区三区在线播放| 精品第一国产综合精品aⅴ| 色综合久久九月婷婷色综合| 视频一区二区三区入口| 26uuuu精品一区二区| 欧美主播一区二区三区美女| 美女网站色91| 国产欧美一区视频| 欧美三级视频在线| 精品一区二区精品| 亚洲www啪成人一区二区麻豆 | 一区二区三区蜜桃网| 在线不卡的av| 成人激情小说网站| 捆绑调教美女网站视频一区| 亚洲欧美一区二区三区国产精品 | 久久天天做天天爱综合色| 欧美无砖专区一中文字| 不卡在线观看av| 狠狠色丁香久久婷婷综合_中 | 亚洲一区二区三区四区在线观看 | 欧美区一区二区三区| 成人91在线观看| 国产一区二区三区国产| 老司机免费视频一区二区| 亚洲h在线观看| 亚洲va国产天堂va久久en| 一级日本不卡的影视| 国产精品国产精品国产专区不蜜| 精品国内二区三区| 亚洲精品一区在线观看| 日韩欧美在线一区二区三区| 在线播放91灌醉迷j高跟美女| 在线观看亚洲一区| 91美女福利视频| 菠萝蜜视频在线观看一区| 成人激情免费视频| 91丝袜国产在线播放| 成人深夜视频在线观看| 国产成人高清在线| jizz一区二区| 在线观看成人免费视频| 欧美日韩和欧美的一区二区| 911国产精品| 久久精品亚洲国产奇米99| 久久男人中文字幕资源站| 国产精品青草久久| 一区二区三区成人在线视频| 日一区二区三区| 久草在线在线精品观看| 国产精品一区二区在线观看不卡| 国产成人啪免费观看软件| 99国产精品久久久久| 99国产欧美久久久精品| 欧美日韩一区高清| 日韩欧美中文字幕精品| 中文字幕欧美三区| 亚洲成av人片一区二区梦乃| 精品中文字幕一区二区小辣椒| 国产高清成人在线| 欧美自拍偷拍午夜视频| 精品免费视频.| 亚洲精品视频观看| 日韩成人伦理电影在线观看| 国产成人免费视频一区| 欧美在线不卡视频| 欧美精品一区二区三区在线 | 婷婷国产v国产偷v亚洲高清| 美腿丝袜亚洲色图| 粉嫩蜜臀av国产精品网站| 色94色欧美sute亚洲13| 日韩午夜激情视频| 亚洲欧美成人一区二区三区| 成人精品国产免费网站| 欧美视频你懂的| 国产目拍亚洲精品99久久精品| 亚洲国产综合91精品麻豆| 国产伦精一区二区三区| 欧美日韩国产免费| 中文字幕成人在线观看| 美女网站视频久久| 欧美三级日本三级少妇99| 中文字幕免费不卡| 毛片av一区二区| 91福利视频网站| 国产欧美日韩中文久久| 免费三级欧美电影| 欧美日韩一区二区三区免费看| 国产精品乱人伦| 国内精品久久久久影院一蜜桃| 色呦呦国产精品| 亚洲国产精品传媒在线观看| 日韩高清不卡在线| 色噜噜夜夜夜综合网| 国产精品你懂的在线欣赏| 美女精品自拍一二三四| 欧美片网站yy| 一区二区三区美女| 99久久精品国产精品久久| 久久久久国产一区二区三区四区| 午夜精品久久久久久久久| 一本大道久久a久久精二百| 国产精品色呦呦| 国产成人精品aa毛片| 久久九九99视频| 国模无码大尺度一区二区三区| 欧美高清你懂得| 夜夜嗨av一区二区三区四季av| 成人精品小蝌蚪| 中文字幕在线不卡一区| 不卡视频一二三| 成人免费在线视频| 色呦呦一区二区三区| 一区二区国产视频| 日本韩国欧美在线| 亚洲一区免费视频| 欧美三级乱人伦电影| 日韩精品成人一区二区在线| 欧美一区二区视频在线观看2022| 五月激情综合网| 精品国产91亚洲一区二区三区婷婷 | 国产午夜久久久久| 99在线热播精品免费| 国产精品电影院| 日本久久一区二区三区| 日韩精品一二三| 久久综合五月天婷婷伊人| 国产福利一区二区三区| 亚洲精品国产a| 51精品秘密在线观看| 经典三级一区二区| 国产精品嫩草久久久久| 在线观看一区二区精品视频| 午夜精品福利一区二区三区蜜桃| 日韩免费观看高清完整版在线观看| 精彩视频一区二区三区| 国产精品国产a| 欧美一区二区三区系列电影| 国产精一品亚洲二区在线视频| 国产精品女人毛片| 欧美一区二区福利视频| 国产成人小视频| 日韩国产欧美三级| 国产婷婷一区二区| 欧美三级欧美一级| 成人小视频免费观看| 五月综合激情日本mⅴ| 国产欧美一区二区三区在线看蜜臀| 色成年激情久久综合| 国产一区视频导航| 亚洲国产综合在线| 欧美国产成人在线| 欧美大尺度电影在线| 在线欧美小视频| 成人午夜大片免费观看| 日本免费在线视频不卡一不卡二 | 91视频在线看| 国产一区二区三区黄视频 | 精品国产凹凸成av人网站| 在线一区二区观看| 国产成人精品免费看| 奇米一区二区三区av| 亚洲精品免费看| 久久精品亚洲一区二区三区浴池| 91麻豆精品久久久久蜜臀| 不卡欧美aaaaa| 国产精品影视天天线| 捆绑调教一区二区三区| 午夜不卡av在线| 亚洲色图视频网| 国产精品免费aⅴ片在线观看| 久久久久久久性| 日韩精品一区国产麻豆| 欧美色偷偷大香| 91老司机福利 在线| jlzzjlzz亚洲日本少妇| 国产精品一区二区黑丝| 久久99国产精品麻豆| 日韩高清在线电影| 三级精品在线观看| 亚洲一区二区三区四区的| 亚洲特级片在线|