bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

mysql視圖之創(chuàng)建可更新視圖的方法詳解

本文實例講述了MySQL視圖之創(chuàng)建可更新視圖的方法。分享給大家供大家參考,具體如下:

專注于為中小企業(yè)提供網站設計制作、成都做網站服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)常熟免費做網站提供優(yōu)質的服務。我們立足成都,凝聚了一批互聯網行業(yè)人才,有力地推動了成百上千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網站建設實現規(guī)模擴充和轉變。

我們知道,在mysql中,視圖不僅是可查詢的,而且是可更新的。這意味著我們可以使用insert或update語句通過可更新視圖插入或更新基表的行。 另外,我們還可以使用delete語句通過視圖刪除底層表的行。但是,要創(chuàng)建可更新視圖,定義視圖的select語句不能包含以下任何元素:

  • 聚合函數,如:min,max,sum,avg,count等。
  • DISTINCT子句
  • GROUP BY子句
  • HAVING子句
  • 左連接或外連接。
  • UNION或UNION ALL子句
  • SELECT子句中的子查詢或引用該表的where子句中的子查詢出現在FROM子句中。
  • 引用FROM子句中的不可更新視圖
  • 僅引用文字值
  • 對基表的任何列的多次引用

我們如果使用temptable算法創(chuàng)建視圖,則無法更新視圖,不過有時可以使用內部連接創(chuàng)建基于多個表的可更新視圖。廢話不多說,讓我們先來看看如何創(chuàng)建一個可更新的視圖。我們先來嘗試基于offices表創(chuàng)建一個名為officeInfo的視圖,它指的是offices表中的三列:officeCode,phone 和 city:

CREATE VIEW officeInfo
 AS
  SELECT officeCode, phone, city
  FROM offices;

接下來,使用以下語句從officeInfo視圖中查詢數據:

SELECT
  *
FROM
  officeInfo;

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

mysql> SELECT * FROM officeInfo;
+------------+------------------+---------------+
| officeCode | phone      | city     |
+------------+------------------+---------------+
| 1     | +1 650 219 4782 | San Francisco |
| 2     | +1 215 837 0825 | Boston    |
| 3     | +1 212 555 3000 | NYC      |
| 4     | +33 14 723 4404 | Paris     |
| 5     | +86 33 224 5000 | Beijing    |
| 6     | +61 2 9264 2451 | Sydney    |
| 7     | +44 20 7877 2041 | London    |
+------------+------------------+---------------+
7 rows in set

然后,使用以下update語句通過officeInfo視圖更改officeCode的值為:4的辦公室電話號碼:

UPDATE officeInfo
SET
  phone = '+86 089866668888'
WHERE
  officeCode = 4;

最后,驗證更改結果,通過執(zhí)行以下查詢來查詢officeInfo視圖中的數據:

mysql> SELECT
  *
FROM
  officeInfo
WHERE
  officeCode = 4;

+------------+------------------+-------+
| officeCode | phone      | city |
+------------+------------------+-------+
| 4     | +86 089866668888 | Paris |
+------------+------------------+-------+
1 row in set

完事我們可以通過從information_schema數據庫中的views表查詢is_updatable列來檢查數據庫中的視圖是否可更新,比如,我們來查詢luyaran數據庫獲取所有視圖,并顯示哪些視圖是可更新的:

SELECT
  table_name, is_updatable
FROM
  information_schema.views
WHERE
  table_schema = 'luyaran';

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

+------------------+--------------+
| table_name    | is_updatable |
+------------------+--------------+
| aboveavgproducts | YES     |
| bigsalesorder  | YES     |
| customerorders  | NO      |
| officeinfo    | YES     |
| saleperorder   | NO      |
+------------------+--------------+
5 rows in set

我們再來嘗試通過視圖刪除行,首先,創(chuàng)建一個名為items的表,在items表中插入一些行,并創(chuàng)建一個查詢包含價格大于700的項的視圖:

USE testdb;
-- create a new table named items
CREATE TABLE items (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(100) NOT NULL,
  price DECIMAL(11 , 2 ) NOT NULL
);
-- insert data into the items table
INSERT INTO items(name,price)
VALUES('Laptop',700.56),('Desktop',699.99),('iPad',700.50) ;
-- create a view based on items table
CREATE VIEW LuxuryItems AS
  SELECT
    *
  FROM
    items
  WHERE
    price > 700;
-- query data from the LuxuryItems view
SELECT
  *
FROM
  LuxuryItems;

執(zhí)行上面查詢語句后,得到以下結果:

+----+--------+--------+
| id | name  | price |
+----+--------+--------+
| 1 | Laptop | 700.56 |
| 3 | iPad  | 700.5 |
+----+--------+--------+
2 rows in set

完事使用DELETE語句來刪除id為3的行:

DELETE FROM LuxuryItems
WHERE
  id = 3;

mysql返回一條消息,表示有1行受到影響:

Query OK, 1 row affected

我們來再次通過視圖檢查數據:

mysql> SELECT * FROM LuxuryItems;
+----+--------+--------+
| id | name  | price |
+----+--------+--------+
| 1 | Laptop | 700.56 |
+----+--------+--------+
1 row in set

我們還可以從基表items查詢數據,以驗證DELETE語句是否實際刪除了該行:

mysql> SELECT * FROM items;
+----+---------+--------+
| id | name  | price |
+----+---------+--------+
| 1 | Laptop | 700.56 |
| 2 | Desktop | 699.99 |
+----+---------+--------+
2 rows in set

我們可以看到,ID為3的行在基表中被刪除。

好啦,本次記錄就到這里了。

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

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

文章標題:mysql視圖之創(chuàng)建可更新視圖的方法詳解
文章出自:http://vcdvsql.cn/article8/pdscip.html

成都網站建設公司_創(chuàng)新互聯,為您提供響應式網站網站導航網站建設全網營銷推廣關鍵詞優(yōu)化服務器托管

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯

成都網頁設計公司