mysqlビューの更新可能なビューの作成方法の詳細
5194 ワード
この例では、mysqlビューの更新可能なビューを作成する方法について説明します.皆さんの参考にしてください.具体的には以下の通りです.
mysqlでは、ビューはクエリー可能であるだけでなく、更新可能であることがわかります.これは、insert文またはupdate文を使用して、更新可能ビューを使用してベーステーブルのローを挿入または更新できることを意味します.また、delete文を使用して、下位テーブルのローをビューから削除することもできます.ただし、更新可能ビューを作成するには、ビューを定義するselect文に次の要素を含めることはできません.集約関数、例えば、min、max、sum、avg、countなど. DISTINCT句 GROUP BY句 HAVING句 左接続または外部接続. ユニオンまたはユニオンALL句 SELECT句のサブクエリまたはテーブルを参照するwhere句のサブクエリがFROM句に表示されます. FROM句の更新不可ビュー を参照する.文字値 のみ参照ベース・テーブルの任意のカラムへの複数回の参照 temptableアルゴリズムを使用してビューを作成すると、ビューを更新できませんが、内部接続を使用して複数のテーブルに基づく更新可能なビューを作成できる場合があります.余計なことは言わないで、まず更新可能なビューを作成する方法を見てみましょう.まず、officesテーブルに基づいてofficeInfoというビューを作成してみましょう.officesテーブルの3つの列:officeCode、phone、cityを指します.
次に、officeInfoビューから次の文を使用してデータを問合せます.
上記のクエリ文を実行すると、次の結果が得られます.
次に、officeInfoビューを使用して、次のupdate文を使用してofficeCodeの値を4のオフィス電話番号に変更します.
最後に、変更結果を検証し、次のクエリを実行してofficeInfoビューのデータを問合せます.
終わったらinformationからschemaデータベースのviewsテーブルクエリis_updatable列を使用して、データベース内のビューが更新可能かどうかを確認します.たとえば、luyaranデータベースをクエリーしてすべてのビューを取得し、更新可能なビューを表示します.
上記のクエリ文を実行すると、次の結果が得られます.
次に、ビューからローを削除してみます.まず、itemsというテーブルを作成し、itemsテーブルにローを挿入し、700以上の価格のアイテムを含むクエリーのビューを作成します.
上記のクエリ文を実行すると、次の結果が得られます.
完了するにはDELETE文を使用してidが3の行を削除します.
mysqlは、1行が影響を受けていることを示すメッセージを返します.
Query OK, 1 row affected
ビューでデータを再度確認します.
また、ベース・テーブルitemsからデータをクエリーして、DELETE文が実際にローを削除したかどうかを確認することもできます.
ID 3の行がベーステーブルから削除されていることがわかります.
はい、今回の記録はここまでです.
MySQLに関する詳細について興味のある読者は、「MySQLクエリーテクニック大全」、「MySQLトランザクションテクニック要約」、「MySQLストレージプロセステクニック大全」、「MySQLデータベースロックに関するテクニック要約」および「MySQL常用関数大概要約」を参照してください.
本明細書では、MySQLデータベース・メーターについて説明します.
mysqlでは、ビューはクエリー可能であるだけでなく、更新可能であることがわかります.これは、insert文またはupdate文を使用して、更新可能ビューを使用してベーステーブルのローを挿入または更新できることを意味します.また、delete文を使用して、下位テーブルのローをビューから削除することもできます.ただし、更新可能ビューを作成するには、ビューを定義するselect文に次の要素を含めることはできません.
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
次に、officeInfoビューを使用して、次のupdate文を使用して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データベース・メーターについて説明します.