Исследуем базы данных с помощью t-sql

Ограничения представлений в MySQL

В статье приведены ограничения для версии MySQL 5.1 (в дальнейшем их число может сократиться).


  • нельзя повесить триггер на представление,
  • нельзя сделать представление на основе временных таблиц; нельзя сделать временное представление;
  • в определении представления нельзя использовать подзапрос в части FROM,
  • в определении представления нельзя использовать системные и пользовательские переменные; внутри хранимых процедур нельзя в определении представления использовать локальные переменные или параметры процедуры,
  • в определении представления нельзя использовать параметры подготовленных выражений (PREPARE),
  • таблицы и представления, присутствующие в определении представления должны существовать.
  • только представления, удовлетворяющие ряду требований, допускают запросы типа UPDATE, DELETE и INSERT.

Создание представлений

Для создания представления используется оператор CREATE VIEW, имеющий следующий синтаксис:

CREATE  OR REPLACE     ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}     VIEW view_name (column_list)     AS select_statement     WITH CASCADED | LOCAL CHECK OPTION  

view_name — имя создаваемого представления. select_statement — оператор SELECT, выбирающий данные из таблиц и/или других представлений, которые будут содержаться в представлении

Оператор CREATE VIEW содержит 4 необязательные конструкции:

OR REPLACE — при использовании данной конструкции в случае существования представления с таким именем старое будет удалено, а новое создано. В противном случае возникнет ошибка, информирующая о сществовании представления с таким именем и новое представление создано не будет. Следует отметить одну особенность — имена таблиц и представлений в рамках одной базы данных должны быть уникальны, т.е. нельзя создать представление с именем уже существующей таблицы. Однако конструкция OR REPLACE действует только на представления и замещать таблицу не будет. ALGORITM — определяет алгоритм, используемый при обращении к представлению (подробнее речь об этом пойдет ниже). column_list — задает имена полей представления. WITH CHECK OPTION — при использовании данной конструкции все добавляемые или изменяемые строки будут проверяться на соответствие определению представления. В случае несоответствия данное изменение не будет выполнено

Обратите внимание, что при указании данной конструкции для необновляемого представления возникнет ошибка и представление не будет создано. (подробнее речь об этом пойдет ниже).

По умолчанию колонки представления имеют те же имена, что и поля возращаемые оператором SELECT в определении представления. При явном указании имен полей представления column_list должен включать по одному имени для каждого поля разделенных запятой. Существует две причины по которым желательно использовать явное указание имен полей представления:

  1. Имена полей представления должны быть уникальны в пределах данного представления. При создании представления основанного на нескольких таблицах возможна ситуация повторения имен полей представления. Например: CREATE VIEW v AS SELECT a.id, b.id FROM a,b; Для избежания такой ситуации нужно явно указывать имена полей представления CREATE VIEW v (a_id, b_id) AS SELECT a.id, b.id FROM a,b; Того же результата можно добиться, используя синонимы (алиасы) для названий колонок: CREATE VIEW v AS SELECT a.id a_id, b.id b_id FROM a,b;
  2. В случае если в определении представления получаемые данные преобразуются с помощью каких-то функций, то именем поля будет данное выражение, что не очень удобно для дальнейших ссылок на это поле. Напимер:

    CREATE VIEW v AS SELECT group_concat(distinct column_name oreder by column_name separator ‘+’) FROM table_name; Вряд ли удобно использовать в дальнейшем в качестве имени поля `group_concat(distinct username order by username separator ‘+’)`

Для просмотра содержимого представления мы используем оператор SELECT (полностью аналогично как в случае простой таблицы), с другой строны, оператор SELECT есть в самом определении представления, т.е. получается вложенная конструкция — запрос в запросе. При этом, некоторые конструкции оператора SELECT могут присутствовать в обоих операторах. Возможны три варианта развития событий: они обе будут выполнены, одна из них будет проигнорированна и результат неопределен. Рассмотрим подробнее эти случаи:

  1. Если в обоих операторах встречается условие WHERE, то оба этих условия будут выполнены как если бы они были объединены оператором AND.
  2. Если в определении представления есть конструкция ORDER BY, то она будет работать только в случае отсутствия во внешнем операторе SELECT, обращающемся к представлению, собственного условия сортировки. При наличии конструкции ORDER BY во внешнем операторе сортировка, имеющаяся в определении представления, будет проигнорирована.
  3. При наличии в обоих операторах модификаторов, влияющих на механизм блокировки, таких как HIGH_PRIORITY, результат их совместного действия неопределен. Для избежания неопределенности рекомендуется в определении представления не использовать подобные модификаторы.

Introduction to MySQL CREATE VIEW statement

The statement creates a new view in the database. Here is the basic syntax of the statement:

In this syntax:

First, specify the name of the view that you want to create after the keywords. The name of the view is unique in a database. Because views and tables in the same database share the same namespace, the name a view cannot the same as the name of an existing table.

Second, use the option if you want to replace an existing view if the view already exists. If the view does not exist, the has no effect.

Third, specify a list of columns for the view. By default, the columns of the view are derived from the select list of the statement. However, you can explicitly specify the column list for the view by listing them in parentheses following the view name.

Finally,  specify a statement that defines the view. The   statement can query data from tables or views. MySQL allows you to use the clause in the statement but ignores it if you select from the view with a query that has its own clause.

By default, the statement creates a view in the current database. If you want to explicitly create a view in a given database, you can qualify the view name with the database name.

SQL References

SQL Keywords ADD ADD CONSTRAINT ALTER ALTER COLUMN ALTER TABLE ALL AND ANY AS ASC BACKUP DATABASE BETWEEN CASE CHECK COLUMN CONSTRAINT CREATE CREATE DATABASE CREATE INDEX CREATE OR REPLACE VIEW CREATE TABLE CREATE PROCEDURE CREATE UNIQUE INDEX CREATE VIEW DATABASE DEFAULT DELETE DESC DISTINCT DROP DROP COLUMN DROP CONSTRAINT DROP DATABASE DROP DEFAULT DROP INDEX DROP TABLE DROP VIEW EXEC EXISTS FOREIGN KEY FROM FULL OUTER JOIN GROUP BY HAVING IN INDEX INNER JOIN INSERT INTO INSERT INTO SELECT IS NULL IS NOT NULL JOIN LEFT JOIN LIKE LIMIT NOT NOT NULL OR ORDER BY OUTER JOIN PRIMARY KEY PROCEDURE RIGHT JOIN ROWNUM SELECT SELECT DISTINCT SELECT INTO SELECT TOP SET TABLE TOP TRUNCATE TABLE UNION UNION ALL UNIQUE UPDATE VALUES VIEW WHERE

MySQL Functions String Functions ASCII CHAR_LENGTH CHARACTER_LENGTH CONCAT CONCAT_WS FIELD FIND_IN_SET FORMAT INSERT INSTR LCASE LEFT LENGTH LOCATE LOWER LPAD LTRIM MID POSITION REPEAT REPLACE REVERSE RIGHT RPAD RTRIM SPACE STRCMP SUBSTR SUBSTRING SUBSTRING_INDEX TRIM UCASE UPPER

Numeric Functions ABS ACOS ASIN ATAN ATAN2 AVG CEIL CEILING COS COT COUNT DEGREES DIV EXP FLOOR GREATEST LEAST LN LOG LOG10 LOG2 MAX MIN MOD PI POW POWER RADIANS RAND ROUND SIGN SIN SQRT SUM TAN TRUNCATE

Date Functions ADDDATE ADDTIME CURDATE CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP CURTIME DATE DATEDIFF DATE_ADD DATE_FORMAT DATE_SUB DAY DAYNAME DAYOFMONTH DAYOFWEEK DAYOFYEAR EXTRACT FROM_DAYS HOUR LAST_DAY LOCALTIME LOCALTIMESTAMP MAKEDATE MAKETIME MICROSECOND MINUTE MONTH MONTHNAME NOW PERIOD_ADD PERIOD_DIFF QUARTER SECOND SEC_TO_TIME STR_TO_DATE SUBDATE SUBTIME SYSDATE TIME TIME_FORMAT TIME_TO_SEC TIMEDIFF TIMESTAMP TO_DAYS WEEK WEEKDAY WEEKOFYEAR YEAR YEARWEEK

Advanced Functions BIN BINARY CASE CAST COALESCE CONNECTION_ID CONV CONVERT CURRENT_USER DATABASE IF IFNULL ISNULL LAST_INSERT_ID NULLIF SESSION_USER SYSTEM_USER USER VERSION

SQL Server Functions String Functions ASCII CHAR CHARINDEX CONCAT Concat with + CONCAT_WS DATALENGTH DIFFERENCE FORMAT LEFT LEN LOWER LTRIM NCHAR PATINDEX QUOTENAME REPLACE REPLICATE REVERSE RIGHT RTRIM SOUNDEX SPACE STR STUFF SUBSTRING TRANSLATE TRIM UNICODE UPPER

Numeric Functions ABS ACOS ASIN ATAN ATN2 AVG CEILING COUNT COS COT DEGREES EXP FLOOR LOG LOG10 MAX MIN PI POWER RADIANS RAND ROUND SIGN SIN SQRT SQUARE SUM TAN

Date Functions CURRENT_TIMESTAMP DATEADD DATEDIFF DATEFROMPARTS DATENAME DATEPART DAY GETDATE GETUTCDATE ISDATE MONTH SYSDATETIME YEAR

Advanced Functions CAST COALESCE CONVERT CURRENT_USER IIF ISNULL ISNUMERIC NULLIF SESSION_USER SESSIONPROPERTY SYSTEM_USER USER_NAME

MS Access Functions String Functions Asc Chr Concat with & CurDir Format InStr InstrRev LCase Left Len LTrim Mid Replace Right RTrim Space Split Str StrComp StrConv StrReverse Trim UCase

Numeric Functions Abs Atn Avg Cos Count Exp Fix Format Int Max Min Randomize Rnd Round Sgn Sqr Sum Val

Date Functions Date DateAdd DateDiff DatePart DateSerial DateValue Day Format Hour Minute Month MonthName Now Second Time TimeSerial TimeValue Weekday WeekdayName Year

Other Functions CurrentUser Environ IsDate IsNull IsNumeric

SQL OperatorsSQL Data TypesSQL Quick Ref

Introduction to MySQL Views

Let’s see the following tables and from the sample database.

This query returns data from both tables and using the inner join:

Here is the output:

Next time, if you want to get the same information including customer name, check number, payment date, and amount, you need to issue the same query again.

One way to do this is to save the query in a file, either .txt or .sql file so that later you can open and execute it from MySQL Workbench or any other MySQL client tools.

A better way to do this is to save the query in the database server and assign a name to it. This named query is called a database view, or simply, view.

By definition, a view is a named query stored in the database catalog.

To create a new view you use the statement. This statement creates a view based on the above query above:

Once you execute the statement, MySQL creates the view and stores it in the database.

Now, you can reference the view as a table in SQL statements. For example, you can query data from the view using the statement:

As you can see, the syntax is much simpler.

Note that a view does not physically store the data. When you issue the statement against the view, MySQL executes the underlying query specified in the view’s definition and returns the result set. For this reason, sometimes, a view is referred to as a virtual table.

MySQL allows you to create a view based on a statement that retrieves data from one or more tables. This picture illustrates a view based on columns of multiple tables:

In addition, MySQL even allows you to create a view that does not refer to any table. But you will rarely find this kind of view in practice.

For example, you can create a view called that return 7 days of a week by executing the following query:


And you can query data from the view as follows:

This picture shows the output:

複寫的考量Considerations for Replication

若要在複寫所涉及的成員資料表上建立分割區檢視,適用下列考量:To create partitioned views on member tables that are involved in replication, the following considerations apply:

  • 如果基礎資料表包括合併式複寫或具有可更新訂閱的異動複寫,請確認選取清單也包括 uniqueidentifier 資料行。If the underlying tables are involved in merge replication or transactional replication with updating subscriptions, ensure that the uniqueidentifier column is also included in the select list.

    資料分割檢視中的任何 INSERT 動作都必須為 uniqueidentifier 資料行提供 NEWID() 值。Any INSERT actions into the partitioned view must provide a NEWID() value for the uniqueidentifier column. 由於無法使用 DEFAULT 關鍵字,因此 uniqueidentifier 資料行的 UPDATE 動作必須提供 NEWID() 值。Any UPDATE actions against the uniqueidentifier column must supply NEWID() as the value because the DEFAULT keyword cannot be used.

  • 利用檢視來進行的更新複寫與在兩個不同的資料庫中複寫資料表相同;這些資料表由不同複寫代理程式來提供,無法保證更新的順序。The replication of updates made by using the view is the same as when tables are replicated in two different databases: the tables are served by different replication agents and the order of the updates is not guaranteed.

SQL Create View with arithmetic expression

Here we are discussing that, arithmetic expression can also be used to create a view in a CREATE VIEW statement.

Example:

Sample table: customer

To create a view ‘myclient’ with three columns ‘client_name’, ‘client_no’ and ‘outspercent’ from the table ‘customer’ with following conditions —

1. ‘outspercent’ column must be created with ‘outstanding_amt’*100/(‘opening_amt’+’receive_amt’) from the customer table,

2. ‘cust_country’ of ‘customer’ table must be ‘USA’,

3. ‘outspercent’ must be greater than 50,

the following SQL statement can be used:

SQL Code:

Output:

To execute query on this view

SQL Code:

SQL Create View with HAVING

Here we are discussing the usage of aggregate COUNT() and HAVING clause along with the CREATE VIEW command. The aggregate function COUNT can’t be used as a predicate with WHERE clause but HAVING can be used.

Example:

Sample table: customer

To create a view ‘countgrade’ with two columns ‘grade’ and ‘gradecount’ from the table ‘customer’ with following conditions —

1. ‘gradecount’ column creating with count(*) from the customer table,

2. unique ‘grade’ must be within the group,

3. number of grades per group must be 3,

the following SQL statement can be used:

SQL Code:

Output:

To execute query on this view


SQL Code:

SQL CREATE INDEX

Команда используется для создания индексов в таблицах (позволяет дублировать значения).

Индексы используются для быстрого извлечения данных из базы данных. Пользователи не могут видеть индексы, они просто используются для ускорения поиска/запросов.

Следующий SQL создает индекс с именем «idx_lastname» в столбце «LastName» таблицы «Persons»:

CREATE INDEX idx_lastname ON Persons (LastName);

Если вы хотите создать индекс для комбинации столбцов, вы можете перечислить имена столбцов в круглых скобках, разделенных запятыми:

CREATE INDEX idx_pname ON Persons (LastName, FirstName);

Примечание: Синтаксис создания индексов различается в разных базах данных. Поэтому: проверьте синтаксис для создания индексов в вашей базе данных.

Примечание: Обновление таблицы с индексами занимает больше времени, чем обновление таблицы без них (поскольку индексы также нуждаются в обновлении). Поэтому создавайте индексы только для тех столбцов, по которым будет часто выполняться поиск.

SQL CREATE VIEW

Syntax:

CREATE  VIEW view_name {)] |

]]}
AS select_statement  CHECK OPTION]

Parameters:

Keywords Description
CREATE VIEW view_name Creates a view with a name of the view.
RECURSIVE Creates a view which collects values from itself and must have a column clause and may not use the WITH clause.
)] Names all of the columns in the view. The number of columns specified must match the number of columns in the select_statement. The view will create the name of columns names from the columns in the table when not mention the columns.
OF udt_name Defines the view on a UDT rather than on the column clause.Use the UNDER clause to define a view on a subtype.
REF IS column_name {SYSTEM GENERATED | USER GENERATED | DERIVED Defines the object-ID column for the view.
column_name WITH OPTIONS SCOPE table_name Provides scoping for a reference column in the view.
AS select_statement Defines the exact SELECT statement that provides the data of the view.
WITH CHECK OPTION Used only on views that allow updates to their base tables and ensure that only those data which may be read by the view those only may be inserted, updated, or deleted by the view. CASCADED performs the check option for the current view and all views upon which it is built and LOCAL performs the check option only for the current view, even when it is built upon other views.

Example:

Sample table: agents

To create a view ‘agentview’ as the table ‘agents’, the following SQL statement can be used:

SQL Code:

Output:

To execute query on this view

SQL Code:

Creating Views

Database views are created using the CREATE VIEW statement. Views can be created from a single table, multiple tables or another view.

To create a view, a user must have the appropriate system privilege according to the specific implementation.

The basic CREATE VIEW syntax is as follows −

CREATE VIEW view_name AS
SELECT column1, column2.....
FROM table_name
WHERE ;

You can include multiple tables in your SELECT statement in a similar way as you use them in a normal SQL SELECT query.

Example

Consider the CUSTOMERS table having the following records −

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Following is an example to create a view from the CUSTOMERS table. This view would be used to have customer name and age from the CUSTOMERS table.

SQL > CREATE VIEW CUSTOMERS_VIEW AS
SELECT name, age
FROM  CUSTOMERS;

Now, you can query CUSTOMERS_VIEW in a similar way as you query an actual table. Following is an example for the same.

SQL > SELECT * FROM CUSTOMERS_VIEW;

This would produce the following result.

+----------+-----+
| name     | age |
+----------+-----+
| Ramesh   |  32 |
| Khilan   |  25 |
| kaushik  |  23 |
| Chaitali |  25 |
| Hardik   |  27 |
| Komal    |  22 |
| Muffy    |  24 |
+----------+-----+

分散式分割區檢視的其他條件Additional Conditions for Distributed Partitioned Views

分散式分割區檢視 (當一或多份成員資料表是在遠端) 適用下列其他條件:For distributed partitioned views (when one or more member tables are remote), the following additional conditions apply:

  • 將啟動分散式交易來確保跨越更新所影響的所有節點之不可部分完成的特性。A distributed transaction will be started to guarantee atomicity across all nodes affected by the update.

  • 將 XACT_ABORT SET 選項設為 ON,INSERT、UPDATE 或 DELETE 陳述式才能夠運作。Set the XACT_ABORT SET option to ON for INSERT, UPDATE, or DELETE statements to work.

  • 針對 smallmoney 類型之遠端資料表中的任何資料行,如果它們受到資料分割檢視所參考,則系統會將這些資料行對應為 money。Any columns in remote tables of type smallmoney that are referenced in a partitioned view are mapped as money. 因此,本機資料表中對應的資料行 (在選取清單的相同序數位置中) 也必須為 money 類型。Therefore, the corresponding columns (in the same ordinal position in the select list) in the local tables must also be of type money.

  • 在資料庫相容性層級 110 以上的情況下,針對 smalldatetime 類型之遠端資料表中的任何資料行,如果它們受到資料分割檢視所參考,則系統會將這些資料行對應為 smalldatetime。Under database compatibility level 110 and higher, any columns in remote tables of type smalldatetime that are referenced in a partitioned view are mapped as smalldatetime. 本機資料表中對應的資料行 (在選取清單的相同序數位置中) 必須為 smalldatetime。Corresponding columns (in the same ordinal position in the select list) in the local tables must be smalldatetime. 這是舊版 SQL ServerSQL Server 的行為變更;針對 smalldatetime 類型之遠端資料表中的任何資料行,如果它們受到資料分割檢視所參考,則系統會將這些資料行對應為 datetime,且本機資料表中對應的資料行必須為 datetime 類型。This is a change in behavior from earlier versions of SQL ServerSQL Server in which any columns in remote tables of type smalldatetime that are referenced in a partitioned view are mapped as datetime and corresponding columns in local tables must be of type datetime. 如需詳細資訊,請參閱 ALTER DATABASE 相容性層級 (Transact-SQL)。For more information, see ALTER DATABASE Compatibility Level (Transact-SQL).

  • 分割區檢視中的任何連結伺服器都不能是回送連結伺服器。Any linked server in the partitioned view cannot be a loopback linked server. 這是指向相同 SQL ServerSQL Server 執行個體的連結伺服器。This is a linked server that points to the same instance of SQL ServerSQL Server.


包含可更新的分割區檢視和遠端資料表的 INSERT、UPDATE 和 DELETE 動作,其 SET ROWCOUNT 選項的設定都會被忽略。The setting of the SET ROWCOUNT option is ignored for INSERT, UPDATE, and DELETE actions that involve updatable partitioned views and remote tables.

當成員資料表和分割區檢視定義都備妥時,SQL ServerSQL Server 查詢最佳化工具會建立智慧型計畫,有效地利用查詢來存取成員資料表中的資料。When the member tables and partitioned view definition are in place, the SQL ServerSQL Server query optimizer builds intelligent plans that use queries efficiently to access data from member tables. 當使用 CHECK 條件約束定義時,查詢處理器會跨越各份成員資料表來對應索引鍵值的散發。With the CHECK constraint definitions, the query processor maps the distribution of key values across the member tables. 當使用者發出查詢時,查詢處理器會比較這項對應與 WHERE 子句所指定的值,且會建立在成員伺服器之間傳送最少量資料的執行計畫。When a user issues a query, the query processor compares the map to the values specified in the WHERE clause, and builds an execution plan with a minimal amount of data transfer between member servers. 因此,雖然部分成員資料表在遠端伺服器中,但 SQL ServerSQL Server 執行個體仍能解析分散式查詢,只需傳送最少量的散發資料。Therefore, although some member tables may be located in remote servers, the instance of SQL ServerSQL Server resolves distributed queries so that the amount of distributed data that has to be transferred is minimal.

Обновить VIEW

Вы можете изменить определение VIEW в PostgreSQL, не удаляя его, используя оператор CREATE OR REPLACE VIEW.

Синтаксис

Синтаксис для оператора CREATE OR REPLACE VIEW в PostgreSQL:

CREATE OR REPLACE VIEW view_name AS SELECT columns FROM table WHERE conditions;

view_name
Название представления, которое вы хотите обновить.

Пример

Вот пример того, как может использоваться оператор CREATE OR REPLACE VIEW в PostgreSQL:

PgSQL

CREATE or REPLACE VIEW current_inventory AS SELECT product_name, quantity, category_name FROM products INNER JOIN categories ON products.category_id = categories.category_id WHERE quantity > 0;

1 2 3 4 5 6

CREATEorREPLACEVIEWcurrent_inventoryAS

SELECTproduct_name,quantity,category_name

FROMproducts

INNER JOINcategories

ONproducts.category_id=categories.category_id

WHEREquantity>0;

Этот пример CREATE OR REPLACE VIEW обновил бы определение VIEW с именем current_inventory, не удаляя его.

ВНИМАНИЕ: Оператор CREATE OR REPLACE VIEW будет работать, если вы добавляете столбцы в представление в конце списка. Тем не менее, это будет ошибка, если вы добавляете новые столбцы в существующие столбцы (то есть: начало или середина существующего списка)

В этом случае не используйте оператор CREATE OR REPLACE VIEW. Лучше удалить VIEW и использовать оператор CREATE VIEW!

Инструкция создания представления SQL

В SQL представление представляет собой виртуальную таблицу, основанную на результирующем наборе инструкций SQL.

Представление содержит строки и столбцы, точно так же, как реальная таблица. Поля в представлении представляют собой поля из одной или нескольких реальных таблиц в базе данных.

В представление можно добавить функции SQL, WHERE и JOIN, а также представить данные, как если бы данные поступили из одной таблицы.

Создать синтаксис представления

CREATE VIEW view_name AS SELECT column1, column2, … FROM table_name WHERE condition;

Примечание: В представлении всегда отображаются актуальные данные! Ядро СУБД повторно создает данные, используя инструкцию SQL View, каждый раз, когда пользователь запрашивает представление.

Introduction

In this article, we are going to see how to use the CREATE VIEW SQL statement to create a view. This is the first article in a series that will be a programmatical approach of creating, altering and working with views using T-SQL. If you are a beginner and you don’t even know what a view is, don’t worry. We will kick off with a definition, and then move on to some basics like syntax, examples, use cases, etc.

A view is simply a virtual table. Think of it as just a query that is stored on SQL Server and when used by a user, it will look and act just like a table but it’s not. It is a view and does not have a definition or structure of a table. Its definition and structure is simply a query that, under the hood, can access many tables or a part of a table.

Views can be used for a few reasons. Some of the main reasons are as follows:

  • To simplify database structure to the individuals using it
  • As a security mechanism to DBAs for allowing users to access data without granting them permissions to directly access the underlying base tables
  • To provide backward compatibility to applications that are using our database

Having said that, those reasons are a topic for designing views which we will not touch in this series. In this article, we are going to go through the CREATE VIEW SQL syntax, see what views are all about, and what we can do with them.

Advantages of MySQL Views

MySQL views bring the following advantages.

1) Simplify complex query

Views help simplify complex queries. If you have any frequently used complex query, you can create a view based on it so that you can reference to the view by using a simple statement instead of typing the query all over again.

2) Make the business logic consistent

Suppose you have to repeatedly write the same formula in every query.  Or you have a query that has complex business logic. To make this logic consistent across queries, you can use a view to store the calculation and hide the complexity.

3) Add extra security layers

A table may expose a lot of data including sensitive data such as personal and banking information.

By using views and privileges, you can limit which data users can access by exposing only the necessary data to them.

For example, the table may contain SSN and address information, which should be accessible by the HR department only.

To expose general information such as first name, last name, and gender to the General Administration (GA) department, you can create a view based on these columns and grant the users of the GA department to the view, not the entire table .

4) Enable backward compatibility

In legacy systems, views can enable backward compatibility.

Suppose, you want to normalize a big table into many smaller ones. And you don’t want to impact the current applications that reference the table.

In this case, you can create a view whose name is the same as the table based on the new tables so that all applications can reference the view as if it were a table.

Note that a view and table cannot have the same name so you need to drop the table first before creating a view whose name is the same as the deleted table.


С этим читают