婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > mysql視圖之創建可更新視圖的方法詳解

mysql視圖之創建可更新視圖的方法詳解

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

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

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

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

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

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

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

SELECT
  *
FROM
  officeInfo;

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

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;

最后,驗證更改結果,通過執行以下查詢來查詢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';

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

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

我們再來嘗試通過視圖刪除行,首先,創建一個名為items的表,在items表中插入一些行,并創建一個查詢包含價格大于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;

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

+----+--------+--------+
| 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視圖之創建視圖(CREATE VIEW)和使用限制實例詳解
  • MySQL如何創建視圖
  • 詳細分析mysql視圖的原理及使用方法
  • MySQL的視圖和索引用法與區別詳解
  • 淺談MySql 視圖、觸發器以及存儲過程
  • MySql視圖觸發器存儲過程詳解
  • mysql視圖原理與用法實例詳解
  • mysql視圖之管理視圖實例詳解【增刪改查操作】
  • MySQL中Update、select聯用操作單表、多表,及視圖與臨時表的區別
  • mysql三張表連接建立視圖
  • MySQL 視圖(View)原理解析

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

巨人網絡通訊聲明:本文標題《mysql視圖之創建可更新視圖的方法詳解》,本文關鍵詞  mysql,視圖,之,創建,可更新,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《mysql視圖之創建可更新視圖的方法詳解》相關的同類信息!
  • 本頁收集關于mysql視圖之創建可更新視圖的方法詳解的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 屏边| 大名县| 若尔盖县| 苏尼特左旗| 宁乡县| 盱眙县| 饶平县| 沁阳市| 遂昌县| 嘉义县| 蚌埠市| 静海县| 浮梁县| 太仓市| 广德县| 遂溪县| 莱州市| 梨树县| 茶陵县| 武山县| 滨海县| 太仆寺旗| 江山市| 开化县| 康保县| 黄冈市| 涪陵区| 二连浩特市| 莱州市| 土默特左旗| 遵化市| 肇源县| 嘉兴市| 灵石县| 疏勒县| 乡宁县| 井陉县| 皋兰县| 额敏县| 文成县| 临安市|