Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL изгледи

Тук обяснявам какво представляват MySQL "изгледите" и как да ги използвам.

MySQL ни предоставя възможността да създаваме изгледи . изглед се дефинира като съхранена заявка, която при извикване произвежда набор от резултати. Някои хора наричат ​​изгледите "виртуални таблици".

Чисто като кал? Нека опитаме отново.

Какво е изглед?

Изгледът е заявка, която записвате в базата данни. След това можете да го стартирате по-късно, просто като извикате този изглед (вместо да пишете отново заявката).

Изгледът може да се състои от сложна заявка, но ще представи резултатите, сякаш е таблица. Следователно, можете да заявите изгледа, сякаш е таблица.

Например, можете да имате сложна заявка, която избира данни от три различни таблици. Можете или да въвеждате тази сложна заявка всеки път, когато трябва да я стартирате, или можете да запазите заявката като изглед. След като бъде запазен като изглед, можете да изпълните прост SELECT оператор за връщане на резултатите от сложната заявка. Но, разбира се, можете също да напишете сложна заявка срещу изгледа, ако е необходимо.

Създайте изглед

Създаването на изгледи е много лесно. Просто предхождате заявката си с един ред код и я стартирате. Изгледът веднага ще бъде създаден във вашата база данни.

Синтаксис

За да създадете изглед, въведете следния израз, последван от заявката:

CREATE VIEW view_name AS

Заменете име_изглед с каквото и да е име, което искате да използвате за изгледа.

Пример

Ако изпълним следния код срещу FruitShop база данни:

CREATE VIEW vFruitInventory AS
SELECT 
    Fruit.FruitName,
    Fruit.Inventory,
    Units.UnitName
FROM
	Fruit INNER JOIN Units ON
    Fruit.UnitId = Units.UnitId;

Сега виждаме изглед, наречен vFruitInventory изброени в Изгледи (може да се наложи да щракнете върху Опресняване бутон за СХЕМИ първо меню):

Добра идея е да помислите за конвенция за именуване на вашите изгледи (както при всеки друг обект на база данни) и да се придържате към него. Много разработчици поставят префикс в имената на изгледите си с v , vw , v_ или vw_ така че улеснява разграничаването на изгледи от таблици в техните заявки. Други разработчици обаче не са съгласни с тази конвенция и предпочитат имената на техните таблици и изгледи да бъдат взаимозаменяеми.

Запитване за изглед

Сега можем да правим заявка за изгледа точно както бихме направили заявка за таблица:

SELECT * FROM vFruitInventory;

Резултат:

Разбира се, можем да използваме и по-конкретна заявка. Например този, който избира само онези записи, при които инвентарът е по-голям или по-малък от 10:

SELECT FruitName 
FROM vFruitInventory
WHERE Inventory <= 10;

Но ние не можем колони на заявка, които не са посочени в изгледа (дори ако са в основните таблици, които изгледът отправя заявки).

Например, можем да направим заявка за Плодове таблица като тази:

SELECT * 
FROM Fruit
WHERE FruitId = 1;

Но не можем да направим заявка за горния vFruitInventory погледнете така:

SELECT * 
FROM vFruitInventory
WHERE FruitId = 1;

Това е така, защото изгледът не връща FruitId колона. Ние посочихме точните колони в изгледа и това са всичко, което се връща. Както споменахме, наборът от резултати на изгледа е точно като таблица и някои обичат да го наричат ​​"виртуална таблица". Ако "таблицата" не включва тези колони, не можете да направите заявка за тях.

Вместо да е ограничение, това всъщност е характеристика на изгледи. Тази функция означава, че можем да предоставим на потребителите достъп до някои колони на таблица, но не и други (чрез изгледа). С други думи, можем да предоставим на потребител достъп до изглед, без да предоставяме на този потребител достъп до основните таблици, до които изгледът има достъп. Някои таблици може да съхраняват чувствителна информация, до която потребителят няма достъп. Но същите таблици може да съхраняват и нечувствителна информация, от която необходими влизам. Какво да правя? Създайте изглед! И този изглед може да избере само нечувствителната информация от тези таблици.

Промяна на изглед

Ето два различни метода за промяна на изгледа си.

Опция 1:Използвайте ALTER VIEW Изявление

Можете да промените изглед, като използвате ALTER VIEW изявление. Като това:

ALTER VIEW view_name AS

Заменете име_изглед с името на изгледа, който искате да промените.

Пример

Нека добавим Fruit.FruitId поле към изгледа:

ALTER VIEW vFruitInventory AS
SELECT 
	Fruit.FruitId,
    Fruit.FruitName,
    Fruit.Inventory,
    Units.UnitName
FROM
	Fruit INNER JOIN Units ON
    Fruit.UnitId = Units.UnitId;

Сега, когато се опитаме да върнем FruitId поле в нашите запитвания ще получим резултати.

Но имайте предвид, че не можем да опитаме да осъществим достъп до това поле като Fruit.FruitId . Имаме достъп до него само като FruitId . И така трябва да бъде. В края на краищата изгледът е „виртуална таблица“ и няма нужда да знаем структурата на таблиците, които отправя заявка.

Опция 2:Използвайте CREATE OR REPLACE

Имайте предвид, че изгледът трябва да съществува, преди да стартирате ALTER VIEW изявление. Ако не съществува, ще получите грешка. Можете да избегнете този проблем, като използвате CREATE OR REPLACE изявление. Това ще създаде изгледа, ако не съществува, или ще го замени, ако съществува.

Така че бихме могли да създадем горния изглед по следния начин:

CREATE OR REPLACE VIEW vFruitInventory AS
SELECT 
    Fruit.FruitName,
    Fruit.Inventory,
    Units.UnitName
FROM
	Fruit INNER JOIN Units ON
    Fruit.UnitId = Units.UnitId;

И тогава бихме могли да го актуализираме, като използваме същия CREATE OR REPLACE изявление, но само модифициране на определението. Например добавяне на Fruit.FruitId поле:

CREATE OR REPLACE VIEW vFruitInventory AS
SELECT 
	Fruit.FruitId,
    Fruit.FruitName,
    Fruit.Inventory,
    Units.UnitName
FROM
	Fruit INNER JOIN Units ON
    Fruit.UnitId = Units.UnitId;

Изпускане на изглед

Можете да пуснете изглед, като използвате DROP VIEW изявление. Като това:

DROP VIEW vFruitInventory

Горното изявление ще премахне изгледа, наречен vFruitInventory .

Изпускане на множество изгледи

Можете да пуснете няколко изгледа, като използвате един и същ DROP VIEW изявление. Просто отделете всяко име на изглед със запетая. Като това:

DROP VIEW view_1, view_2 ...

IF EXISTS Клауза

Можете също да използвате IF EXISTS клауза за предотвратяване на възникване на грешка, ако изглед не съществува:

DROP VIEW IF EXISTS view_1, view_2 ...

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Получаване на новия идентификатор на първичен ключ на запис от MySQL заявка за вмъкване?

  2. MySql Транспониране на ред в колона и колона в ред

  3. Как да получа ID на последния актуализиран ред в MySQL?

  4. Как да генерирам данни в MySQL?

  5. Конвертирайте от MySQL datetime в друг формат с PHP