返回介绍

Views in MySQL

发布于 2025-02-22 22:20:13 字数 6342 浏览 0 评论 0 收藏 0

In this part of the MySQL tutorial, we will mention views.

View definition

A view is a specific look on data from one or more tables. It can arrange data in some specific order, highlight or hide some data. A view consists of a stored query accessible as a virtual table composed of the result set of a query. Unlike ordinary tables a view does not form part of the physical schema. It is a dynamic, virtual table computed or collated from data in the database.

A view is a pseudo table. It is a stored query which looks like a table. And it can be referenced like a table.

Views can restrict users to specific rows or columns and thus enhance security. They can be used to join columns from multiple tables, so that they look like a single table. They can be used to provide aggregate information.

There are several restrictions that apply to views. Here are some of them:

  • The SELECT statement cannot contain a subquery
  • The SELECT statement cannot refer to system or user variables
  • Any table or view referred to in the definition must exist
  • A temporary VIEW cannot be created
  • A VIEW cannot be associated with a trigger

Creating, modifying and dropping a View

In the next example, we create a simple view. We use CREATE VIEW syntax to create a view.

mysql> SELECT * FROM Cars;
+----+------------+--------+
| Id | Name     | Cost   |
+----+------------+--------+
|  1 | Audi     |  52642 |
|  2 | Mercedes   |  57127 |
|  3 | Skoda    |   9000 |
|  4 | Volvo    |  29000 |
|  5 | Bentley  | 350000 |
|  6 | Citroen  |  21000 |
|  7 | Hummer   |  41400 |
|  8 | Volkswagen |  21600 |
+----+------------+--------+ 

This is our data, upon which we create the view.

mysql> CREATE VIEW CheapCars AS 
  -> SELECT Name FROM Cars WHERE Cost<25000;

We create a view CheapCars . These are cars which cost under 25000.

mysql> SELECT * FROM CheapCars;
+------------+
| Name     |
+------------+
| Skoda    |
| Citroen  |
| Volkswagen |
+------------+

A view is a database object than can be queried. There are three cars which are considered to be cheap.

mysql> ALTER VIEW CheapCars AS SELECT Name FROM Cars
  -> WHERE Cost<30000;

mysql> SELECT * FROM CheapCars;
+------------+
| Name     |
+------------+
| Skoda    |
| Volvo    |
| Citroen  |
| Volkswagen |
+------------+

We can redefine a view. Say we now consider a car to be cheap if it costs under 30000. We use the ALTER VIEW statement to modify our view.

What happens to a view if we delete a table, from which the data is selected?

mysql> DROP TABLE Cars;

mysql> SELECT * FROM CheapCars;
ERROR 1356 (HY000): View 'mydb.CheapCars' references invalid table(s) 
or column(s) or function(s) or definer/invoker of view lack rights to use them

Querying the view we receive the above error.

mysql> SOURCE cars.sql

mysql> SELECT * FROM CheapCars;
+------------+
| Name     |
+------------+
| Skoda    |
| Citroen  |
| Volkswagen |
+------------+

When we recreate the table the view works again.

mysql> DROP VIEW CheapCars;

Finally, a view is deleted with the DROP VIEW syntax.

Finding views

We will mention several ways how to find views in MySQL database.

mysql> SHOW FULL TABLES;
+----------------+------------+
| Tables_in_mydb | Table_type |
+----------------+------------+
| AA       | BASE TABLE |
...
| Chars      | BASE TABLE |
| CheapCars    | VIEW     |
| Customers    | BASE TABLE |
| Dates      | BASE TABLE |
| Decimals     | BASE TABLE |
| FavoriteCars   | VIEW     |
...

We can list all tables in a database with a SHOW FULL TABLES statement. In the Table_type column we can see, whether it is a table or a view.

mysql> SELECT TABLE_NAME, TABLE_TYPE FROM information_schema.TABLES;
+---------------------------------------+-------------+
| TABLE_NAME              | TABLE_TYPE  |
+---------------------------------------+-------------+
| CHARACTER_SETS            | SYSTEM VIEW |
| COLLATIONS              | SYSTEM VIEW |
| COLLATION_CHARACTER_SET_APPLICABILITY | SYSTEM VIEW |
| COLUMNS                 | SYSTEM VIEW |
| COLUMN_PRIVILEGES           | SYSTEM VIEW |
| ENGINES                 | SYSTEM VIEW |
...
| Chars                 | BASE TABLE  |
| CheapCars               | VIEW    |
| Customers               | BASE TABLE  |
| Dates                 | BASE TABLE  |
| Decimals                | BASE TABLE  |
| FavoriteCars              | VIEW    |
...

In the information_schema database there is a TABLES table. The TABLE_NAME and TABLE_TYPE columns give us information about table names and their types.

mysql> SELECT TABLE_NAME FROM information_schema.VIEWS;
+--------------+
| TABLE_NAME   |
+--------------+
| CheapCars  |
| FavoriteCars |
+--------------+

This is the most straightforward way to find views. We query the VIEWS table of the information_schema database.

Creating a view with a UNION

The UNION operator is used to combine result-sets of two or more SELECT statements. Each select must have the same number of columns.

mysql> CREATE VIEW FavoriteCars AS
  -> SELECT * FROM Cars WHERE Id=7
  -> UNION SELECT * FROM Cars WHERE Id=4
  -> UNION SELECT * FROM Cars WHERE Id=5;

We create a view called FavoriteCars. In this view, we have three rows which are considered to be favourite. There are three SELECT statements combined with a UNION operator.

mysql> SELECT * FROM FavoriteCars;
+----+---------+--------+
| Id | Name  | Cost   |
+----+---------+--------+
|  7 | Hummer  |  41400 |
|  4 | Volvo   |  29000 |
|  5 | Bentley | 350000 |
+----+---------+--------+

This is a SELECT from the view.

In this part of the MySQL tutorial, we have worked with views.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文