SQL е нашето всичко

Както вероятно вече се досещате, всички команди към SQL сървъра могат да се подават чрез SQL заявки. Всичко.

Тези отбори са официално разделени на 4 групи:

  • изрази за дефиниране на данни (Език за дефиниране на данни, DDL ):

    • CREATE създава обект на база данни (самата база данни, table, изглед, потребител и т.н.)
    • ALTER променя обект
    • DROP премахва обект
  • оператори за манипулиране на данни (Език за манипулиране на данни, DML ):

    • SELECT избира данни, които отговарят на дадени условия
    • INSERT добавя нови данни
    • UPDATE променя съществуващите данни
    • DELETE премахва данни
  • оператори за дефиниране на достъп до данни (Език за управление на данни, DCL ):

    • GRANT предоставя на потребител (група) права за извършване на определени операции върху обект
    • REVOKE отменя издадени преди това разрешения
    • DENY задава забрана, която има предимство пред разрешението
  • Изявления на езика за контрол на транзакциите ( TCL ) :

    • COMMIT прилага транзакция
    • ROLLBACK връща всички промени, напequalsи в контекста на текущата транзакция
    • SAVEPOINT разделя транзакцията на по-малки секции

И първите две нива изучавахме само разновидности на оператора SELECT. Представете си колко интересни неща ни очакват в бъдеще.

Но ние се подготвяме тук предимно за Java програмисти, така че ще проучим тези сценарии, които определено ще срещнете по време на работа.

Системният администратор на проекта най-вероятно ще създаде всички бази данни, но определено ще трябва сами да правите избор от данните много пъти.

Освен това понякога вашият code няма да запише всички данни в базата данни or да го запише по грешен начин, така че често ще трябва да се качите в него с химикалки и да видите Howво всъщност се съхранява там.

Нека отново да прегледаме нещата, които засегнахме в предишните лекции.

Създаване на схема в база данни

За да създадете нова схема в СУБД, трябва да изпълните командата:

CREATE SCHEMA Name;

Това е най-лесният вариант. Освен това, когато създавате нова схема, можете да посочите формата на codeиране на данни и други параметри.

Ако искате да изтриете схемата, но не сте сигурни дали съществува, тогава трябва да изпълните командата:

DROP SCHEMA IF EXIST Name;

Често ще видите тези команди във файлове с резервни копия на различни бази данни, затова ги представям тук.

Избор на текущата схема

Ако имате много схеми във вашата СУБД, лесно може да се случи различните схеми да имат едни и същи таблици. За да избегнете объркване, можете да направите две неща:

  • Винаги поставяйте името на схемата преди името на tableта
  • Посочете схема по подразбиране

Нека напишем заявка, която ще избере данни от потребителската table , която е в тестовата схема . Ще изглежда нещо подобно:

SELECT * FROM test.user;

Това е просто необходимо, ако трябва да обедините (JOIN) няколко таблици от различни схеми в една заявка.

Между другото, в езика Java често правим нещо подобно: ако в codeа трябва да използваме класове с едно и също име от различни пакети, добавяме името на пакета преди името на класа.

Вторият начин е да посочите схемата по подразбиране . Ако заявката указва име на table, но не и схема, се използва схемата по подразбиране. За да направите това, използвайте командата USE :

USE name - schemes;

Нека пренапишем предишната заявка с помощта на израза USE:

USE test;
SELECT * FROM user;

Създаване на изглед

В допълнение към таблици с реални данни, SQL ви позволява да съхранявате нещо като виртуални таблици, където данните се изтеглят от реални таблици. Такива виртуални таблици се наричат ​​VIEW.

Такава table не може да съхранява реални данни и при всеки достъп до нея тя изтегля данни от реални таблици. Съдържанието на такъв VIEW се определя с помощта на SQL заявка.

Можете да създадете VIEW от всяка заявка SELECT с команда като:

CREATE VIEW Name AS
SELECT-request;
Нека напишем заявка, която ще създаде виртуална table public_employee въз основа на tableта на служителите, където информацията за заплатите на служителите ще бъде скрита:
CREATE VIEW public_employee AS
SELECT id, name FROM employee

В горния пример нашата table (VIEW) public_employee ще съдържа само идентификатори на служители и техните имена, но не и информация за тяхната заплата. Можете да използвате такива изгледи на същото място като реални таблици.

Защо са необходими изгледи? Те имат редица предимства:

Гъвкав контрол на достъпа до информация . Можете да дадете на определени потребители достъп само до VIEW, но не и до таблици. И в View извадете само публична информация от таблици. Освен това, ако в бъдеще към таблиците се добавят нови колони с важна информация, тя няма случайно да попадне в изгледа.

Денормализация на данни . За удобство на съхранение данните често се разделят на стотици и хиляди таблици, но не е много удобно за обикновен човек да работи с такива данни - трябва да пишете твърде сложни заявки. С View можете да създавате виртуални таблици, които показват данни от десетки различни таблици в една table.

Полиморфизъм и капсулиране . Можете да промените структурите на вашата база данни. В същото време потребителите на програмата, които работят с вашите изгледи, няма да познаят, че нещо се е променило. И няма да има нужда да пренаписвате codeа на програмите, които имат достъп до View. Просто ще трябва да настроите SQL скрипта, който е свързан с VIEW.

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