Функционалност на езика SQL. Въведение в MS SQL Server и T-SQL

Всяка SQL команда започва с ключова дума - глагол, който описва действието, което трябва да се извърши от командата, като CREATE. Екипът може да има едно или повече изречения. Изречението описва данните, с които работи екипът, или съдържа уточняваща информация за извършеното от екипа действие. Всяка клауза започва с ключова дума, като WHERE (къде). Някои клаузи в командата са задължителни, други не. Някои изречения могат да съдържат допълнителни ключови думи, изрази. Много предложения включват имена на таблици или полета. Имената трябва да са дълги между 1 и 18 знака, да започват с буква и да не съдържат интервали или специални пунктуационни знаци. Ключовите думи не могат да се използват като имена.

52. SQL (Structured Query Language) - Структуриран език за заявкиТова е стандартният език за заявки за работа с релационни бази данни.

SQL не съдържа традиционни изрази, които контролират потока от програми, той съдържа само набор от стандартни изрази за достъп до данни, съхранявани в база данни.

Езикът SQL може да се използва за достъп до базата данни в два режима: кога интерактивна работаи в приложни програми.

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

Характеризирайки езика SQL като цяло, могат да се разграничат следните характеристики:

· Структура на високо ниво, напомняща на английски;

· Независимост от конкретна СУБД;

· Наличие на разработване на стандарти;

· Възможността за изпълнение на интерактивни заявки за извличане на данни и промяна на тяхната структура;

· софтуерен достъп до бази данни;

· Поддръжка на клиент/сървър архитектура;

· Разширяемост и поддръжка на обектно-ориентирани технологии;



· Възможност за достъп до данни в Интернет.

Основните функции на SQL езика:

SQL - интерактивен език за заявки... Потребителите въвеждат SQL команди интерактивно, за да извличат данни и да ги показват на екрана и да правят промени в базата данни;

SQL - език за програмиране на база данни... SQL командите се вмъкват в приложения за достъп до базата данни;

SQL - език за администриране на база данни... Администраторът на базата данни може да използва SQL, за да дефинира структурата на базата данни и да контролира достъпа до данни;

SQL - език за създаване на клиент/сървър приложение... В приложните програми SQL се използва като средство за организиране на комуникация през локална мрежа със сървър на база данни, който съхранява споделени данни и т.н.

55. Възможности на езикаЕзикът SQL, който отговаря на най-новите стандарти SQL: 2003, SQL: 1999, е много богат и сложен език, чиито възможности са трудни за незабавно възприемане, още по-малко за разбиране. Следователно трябва да разбиете езика на нива. В една от класификациите, предоставени от стандарта SQL, този език е разделен на "основни" (входни), "междинни" (междинни) и "пълни" (пълни) нива. Основното ниво съдържа около четиридесет команди, които могат да бъдат групирани в категории според тяхната функционалност.

СЪЗДАВАНЕ НА ТАБЛИЦАТА (NOMZ INT, NAME CHAR (15), YEAR INT, SEX CHAR (3))

DROP TABLE Подробности

ПРОМЕНИ информация за ТАБЛИЦА (SEMPOL CHAR (10))

СЪЗДАВАНЕ НА ИЗГЛЕЖДАНЕ на степен M1 КАТО ИЗБРАН * ОТ ОЦЕНКА, КЪДЕТО ГРУПА = "M-1"

ВМЕСТЕ В ИНФОРМАЦИОННИ ЦЕННОСТИ (980101, "ИВАНОВ И. И.", 1980, "МЪЖ")

ИЗТРИВАНЕ ОТ Подробности КЪДЕ NOMZ = 980201

АКТУАЛИЗАЦИЯ Подробности ЗАДАДЕТЕ ПЪЛНО ИМЕ = "И. И. КРАВЦОВА" КЪДЕ NOMZ = 980201

ИЗБЕРЕТЕ * ОТ Информация, КЪДЕТО ПЪЛНО ИМЕ = "СИДОРОВ С. С." ИЛИ Пълно име = "ПЕТРОВ П. П."

54. Типове данни и изразиЗа достъп до релационна таблица в SQL, трябва да напишете (зададете) команда. ИЗБЕРЕТЕключова думаказва на СУБД какво действие ще предприеме тази команда. Командите за заявка започват с ключова дума. В допълнение към SELECT, това могат да бъдат думи СЪЗДАВАНЕ-създавам, INSERT- вмъкване, ИЗТРИЙ- Изтрий, COMMIT- да завърши и др.

ОТ -ключова дума като SELECT, която се появява във всяка команда. Следва интервал, последван от името на таблиците, използвани като източници на информация. Имената на таблици и полета трябва да съдържат от 1 до 18 знака, да започват с буква и да не съдържат интервали или специални знаци.

КЪДЕТО ключова дума, последвана от предикат, е условие, наложено на запис в таблицата, което той трябва да удовлетвори, за да изчезне в селекцията.

ПОДРЕДЕНИ ПО -сортиране на показваните записи (Asc - във възходящ ред, Desc - в низходящ ред. Ако типът на сортиране не е посочен, сортирането става във възходящ ред).

CHAR (дължина) CHARACTER (дължина)Символни низове с постоянна дължина

INTEGER INTЦели числа

SMALLINTМалко цяло число

NUMERIC (прецизност, степен) DECIMAL (прецизност, степен DEC (прецизност, степен)Номер на фиксирана точка

FLOAT (прецизност)Число с плаваща запетая

Двойна точностчисла с float zap висока точност

Изразив SQL те се използват за задаване на критерии за избор на данни или извършване на операции върху стойности, които се четат от база данни. Изразите са специфична последователност от полета на базата данни, константи, функции, свързани чрез оператори.

Константисе използват за посочване на конкретни стойности на данните. Константи с фиксирана точка, например: 21 -375,18 62,3

константи с плаваща запетая,например: 1.5Е7 -3.14Е9 2.5Е-6 0.783Е24

Низови константитрябва да бъдат затворени в единични кавички. Примери за такива константи: "Минск" "Ню Йорк" "Иванов I. I."

Липсваща стойност(НУЛА). SQL поддържа обработка на липсващи данни с концепцията за липсваща стойност.

Повечето SQL-ориентирани СУБД поддържат т.нар агрегатни (обобщени) функции... Често използваните агрегатни функции включват следното:

· БРОЯ- броят на стойностите в колоната на таблицата;

· СУМ- сумата от стойностите в колоната;

· AVG- средноаритметичната стойност на стойностите в колоната;

· МАКС- максималната стойност в колоната;

· МИНТова е минималната стойност в колоната.

Можете да използвате следното в изрази типове оператори:

· аритметика: + (добавка), - (изваждане), * (умножение), / (разделение);

· връзка: = (равно),> (по-голямо от),< (меньше), >= (по-голямо или равно),<= (меньше или равно), <>(не е равно);

· главоблъсканица: И(логическо "И"), ИЛИ(логическо "ИЛИ"), НЕ(логическо отрицание);

56. Команди за управление на транзакцииви позволяват да гарантирате целостта на базата данни.

SQL транзакцияТова са няколко последователни SQL команди, които трябва да се изпълняват като една единица.

В езика SQL обработката на транзакциите се осъществява с помощта на две команди - COMMITи ОТКЛЮЧВАНЕ... Те управляват промените, направени от група екипи. Команда COMMITотчита успешното приключване на транзакцията. Той информира СУБД, че транзакцията е завършена, всички нейни команди са изпълнени успешно и не са възникнали несъответствия в базата данни. Команда ОТКЛЮЧВАНЕсъобщава за неуспешно приключване на сделката. Той информира СУБД, че потребителят не иска да завърши транзакцията и СУБД трябва да отхвърли всички промени, направени в базата данни в резултат на транзакцията. В този случай СУБД връща базата данни в състоянието, в което е била преди изпълнението на транзакцията.

Команди COMMITи ОТКЛЮЧВАНЕсе използват главно в програмен режим, въпреки че могат да се използват и в интерактивен режим.

57. За достъп до команди за управлениесе отнася до команди за изпълнение на административни функции, които присвояват или отнемат правото (привилегията) за използване на таблиците на базата данни по определен начин. Всеки потребител на базата данни има определени права по отношение на обектите на базата данни.

праваТова са действията с обекта, които потребителят може да извърши. Правата могат да се променят с течение на времето: старите могат да бъдат отменени, добавени нови. Предоставят се следните права:

INSERT - правото за добавяне на данни към таблицата;

UPDATE - право за промяна на данните на таблицата;

DELETE - правото за изтриване на данни от таблицата;

· ЛИТЕРАТУРА - правото на дефиниране на първичния ключ.

58 Вграждане на език в приложни програми...Към вграденисе отнася до команди, предназначени да реализират достъп до базата данни от приложни програми, написани на определен език за програмиране.

Последна актуализация: 24.06.2017

SQL Server е една от най-популярните системи за управление на бази данни (СУБД) в света. Тази СУБД е подходяща за голямо разнообразие от проекти: от малки приложения до големи проекти с високо натоварване.

SQL Server е създаден от Microsoft. Първата версия е издадена през 1987 г. А текущата версия е версия 16, която беше пусната през 2016 г. и ще се използва в настоящия урок.

SQL Server отдавна е система за управление на база данни само за Windows, но от версия 16 е достъпна и за Linux.

SQL Server се характеризира с такива характеристики като:

    Производителност. SQL Server е много бърз.

    Надеждност и безопасност. SQL Server осигурява криптиране на данни.

    Простота. Тази СУБД е относително лесна за работа и администриране.

Централният аспект в MS SQL Server, както във всяка СУБД, е базата данни. Базата данни е хранилище на данни, организирано по специфичен начин. Не е необичайно базата данни да представлява физически файл на твърд диск, въпреки че това съпоставяне не се изисква. Системите за управление на бази данни или СУБД се използват за съхраняване и администриране на бази данни. И просто MS SQL Server е една такава СУБД.

За организиране на бази данни MS SQL Server използва релационен модел. Този модел на база данни е разработен през 1970 г. от Едгар Код. И днес това всъщност е стандартът за организиране на бази данни.

Релационният модел предполага съхранение на данни под формата на таблици, всяка от които се състои от редове и колони. Всеки ред съхранява отделен обект, а колоните съдържат атрибутите на този обект.

Първичният ключ се използва за идентифициране на всеки ред в таблицата. Една или повече колони могат да действат като първичен ключ. Използвайки първичния ключ, можем да се обърнем към конкретен ред в таблицата. Съответно два реда не могат да имат един и същ първичен ключ.

Чрез ключове една таблица може да бъде свързана с друга, тоест връзките могат да бъдат организирани между две таблици. А самата таблица може да бъде представена като "релация".

Езикът SQL (Structured Query Language) се използва за взаимодействие с базата данни. Клиент (например външна програма) изпраща заявка в SQL, използвайки специален API. СУБД правилно интерпретира и изпълнява заявката и след това изпраща резултата на клиента.

SQL първоначално е разработен в IBM за система от база данни, наречена System / R. В същото време самият език се наричаше SEQUEL (Structured English Query Language). Въпреки че нито базата данни, нито самият език в крайна сметка не бяха официално публикувани, традиционно самият термин SQL често се произнася като „продължение“.

През 1979 г. Relational Software Inc. разработи първата система за управление на база данни, наречена Oracle и която използва езика SQL. Поради успеха на този продукт, компанията беше преименувана на Oracle.

Впоследствие започнаха да се появяват други системи за бази данни, които използваха SQL. В крайна сметка, през 1989 г., Американският национален институт по стандарти (ANSI) кодифицира езика и публикува първия си стандарт. След това стандартът периодично се актуализира и допълва. Последната му актуализация е извършена през 2011 г. Но въпреки съществуването на стандарт, доставчиците на бази данни често използват свои собствени реализации на SQL езика, които са малко по-различни една от друга.

Има два вида на SQL езика: PL-SQL и T-SQL. PL-SQL се използва в СУБД като Oracle и MySQL. T-SQL (Transact-SQL) се използва в SQL Server. Ето защо именно T-SQL ще бъде разгледан в този урок.

В зависимост от задачата, която T-SQL командата изпълнява, тя може да бъде един от следните типове:

    DDL (език за дефиниране на данни). Този тип включва различни команди, които създават база данни, таблици, индекси, съхранени процедури и т.н. Като цяло данните са дефинирани.

    По-специално, можем да припишем следните команди на този тип:

    • CREATE: Създава обекти на база данни (самата база данни, таблици, индекси и т.н.)

      ALTER: модифицира обектите на базата данни

      DROP: пуска обекти на базата данни

      TRUNCATE: премахва всички данни от таблици

    DML (език за манипулиране на данни). Този тип включва команди за избор на данни, актуализиране, добавяне, изтриване – общо взето всички онези команди, с които можем да манипулираме данни.

    Следните команди са от този тип:

    • SELECT: извлича данни от DB

      АКТУАЛИЗИРАНЕ: актуализира данните

      INSERT: добавя нови данни

      ИЗТРИВАНЕ: изтрива данни

    DCL (език за управление на данни). Този тип включва команди, които управляват правата за достъп до данни. По-специално, това са следните команди:

    • GRANT: предоставя права за достъп до данни

      REVOKE: отменя правата за достъп до данни

Leran2002 9 април 2015 г. в 12:31 ч

Урок по езика SQL (DDL, DML), използвайки примера на диалекта на MS SQL Server. Част първа

  • Microsoft SQL Server,
  • SQL
  • Урок

За какво е този урок

Този урок е нещо като "печат на моята памет" за SQL езика (DDL, DML), т.е. това е информация, която се е натрупала в хода на професионалната ми дейност и постоянно се съхранява в главата ми. Това е достатъчен минимум за мен, който се използва най-често при работа с бази данни. Ако се наложи да се използват по-пълни SQL конструкции, тогава обикновено се обръщам за помощ към библиотеката MSDN, намираща се в Интернет. Според мен е много трудно да държиш всичко в главата си и няма особена нужда от това. Но е много полезно да знаете основните конструкции, т.к те са приложими в почти същата форма в много релационни бази данни като Oracle, MySQL, Firebird. Разликите са основно в типовете данни, които могат да се различават в детайли. Няма толкова много основни конструкции на SQL езика и с постоянна практика те бързо се запомнят. Например, за да създавате обекти (таблици, ограничения, индекси и т.н.), достатъчно е да имате под ръка текстов редактор на средата (IDE) за работа с базата данни и няма нужда да изучавате визуални инструменти, изострени за работа с определен тип база данни (MS SQL, Oracle, MySQL, Firebird, ...). Също така е удобно, защото целият текст е пред очите ви и не е нужно да минавате през множество раздели, за да създадете, например, индекс или ограничение. При постоянна работа с база данни, създаването, промяната и особено пресъздаването на обект с помощта на скриптове е много пъти по-бързо, отколкото ако се прави във визуален режим. Също така в режим на скрипт (съответно, с дължимата грижа) е по-лесно да зададете и контролирате правилата за именуване на обекти (моето субективно мнение). Освен това скриптовете са удобни за използване, когато промените, направени в една база данни (например тестова), трябва да бъдат прехвърлени в същата форма в друга (продуктивна) база данни.

Езикът SQL е разделен на няколко части, тук ще обсъдя 2-те най-важни части от него:
  • DML - език за манипулиране на данни, който съдържа следните конструкции:
    • SELECT - избор на данни
    • INSERT - вмъкване на нови данни
    • АКТУАЛИЗАЦИЯ - актуализиране на данните
    • DELETE - изтриване на данни
    • MERGE - сливане на данни
Защото Аз съм практик, в този урок ще има малко теория като такава и всички конструкции ще бъдат обяснени с практически примери. Освен това вярвам, че езикът за програмиране и особено SQL може да се овладее само на практика, като го усетите и разберете какво се случва, когато изпълните тази или онази конструкция.

Този урок се основава на принципа стъпка по стъпка, т.е. необходимо е да го прочетете последователно и за предпочитане веднага след примерите. Но ако по пътя имате нужда да научите повече за дадена команда по-подробно, тогава използвайте конкретно търсене в Интернет, например в библиотеката на MSDN.

При писането на този урок беше използвана версията на базата данни MS SQL Server 2014, за изпълнение на скриптовете, които използвах MS SQL Server Management Studio (SSMS).

Накратко за MS SQL Server Management Studio (SSMS)

SQL Server Management Studio (SSMS) е помощна програма за Microsoft SQL Server за конфигуриране, управление и администриране на компоненти на базата данни. Тази помощна програма съдържа редактор на скриптове (който основно ще използваме) и графична програма, която работи със сървърни обекти и настройки. Основният инструмент в SQL Server Management Studio е Object Explorer, който позволява на потребителя да преглежда, извлича и манипулира сървърни обекти. Този текст е частично заимстван от Wikipedia.

За да създадете нов редактор на скриптове, използвайте бутона Нова заявка:

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

За да изпълните конкретна команда (или група от команди), изберете я и натиснете бутона Изпълнение или клавиша F5. Ако в момента в редактора има само една команда или трябва да изпълните всички команди, тогава не е необходимо да избирате нищо.

След изпълнение на скриптове, особено тези, създаващи обекти (таблици, колони, индекси), за да видите промените, използвайте актуализацията от контекстното меню, като изберете съответната група (например Таблици), самата таблица или групата Колони в нея.

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

Малко теория

Релационна база данни (RDB или по-нататък в контекста на просто база данни) е колекция от таблици, които са свързани помежду си. Грубо казано, базата данни е файл, в който данните се съхраняват в структурирана форма.

СУБД е система за управление на тези бази данни, т.е. представлява набор от инструменти за работа с определен тип база данни (MS SQL, Oracle, MySQL, Firebird, ...).

Забележка
Защото в живота, в разговорната реч, ние най-често казваме: "Oracle DB", или дори просто "Oracle", което всъщност означава "Oracle DBMS", тогава в контекста на този урок понякога ще се използва терминът DB. От контекста мисля, че ще стане ясно за какво става дума.

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

Таблицата е основният обект на RDB, всички RDB данни се съхраняват ред по ред в колоните на таблицата. Низовете, записите също са синоними.

За всяка таблица, както и за нейните колони, са дадени имена, чрез които впоследствие се осъществява достъп.
Името на обект (име на таблица, име на колона, име на индекс и т.н.) в MS SQL може да има максимална дължина от 128 знака.

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

SQL е език, който ви позволява да изпълнявате заявки в база данни с помощта на СУБД. В конкретна СУБД SQL езикът може да има специфична реализация (собствен диалект).

DDL и DML са подмножество на SQL езика:

  • Езикът DDL се използва за създаване и модифициране на структурата на базата данни, т.е. за създаване / модифициране / изтриване на таблици и връзки.
  • Езикът DML позволява манипулиране на таблични данни, т.е. с нейните реплики. Тя ви позволява да избирате данни от таблици, да добавяте нови данни към таблици и да актуализирате и изтривате съществуващи данни.

Има 2 типа коментари, които могат да се използват в SQL (едноредови и многоредови):

Коментар на един ред
и

/ * многоредов коментар * /

Всъщност това ще бъде достатъчно за теорията.

DDL - Език за дефиниране на данни

Например, помислете за таблица с данни за служителите, в обичайната форма за човек, който не е програмист:

В този случай колоните на таблицата имат следните имена: Номер на персонала, пълно име, Дата на раждане, E-mail, Длъжност, Отдел.

Всяка от тези колони може да се характеризира с типа данни, които съдържа:

  • Персонален номер - цяло число
  • Пълно име - низ
  • Дата на раждане - дата
  • Имейл - низ
  • Позиция - низ
  • Отдел - низ
Типът колона е характеристика, която показва какъв вид данни може да съхранява дадена колона.

За начало ще бъде достатъчно да запомните само следните основни типове данни, използвани в MS SQL:

смисъл MS SQL нотация Описание
Низ с променлива дължина варчар (N)
и
nvarchar (N)
С числото N можем да посочим максималната възможна дължина на реда за съответната колона. Например, ако искаме да кажем, че стойността на колоната "name" може да съдържа максимум 30 знака, тогава трябва да я зададем на типа nvarchar (30).
Разликата между varchar и nvarchar е, че varchar съхранява низове във формат ASCII, където един знак е 1 байт, докато nvarchar съхранява низове във формат Unicode, където всеки знак е 2 байта.
Типът varchar трябва да се използва само ако сте 100% сигурни, че полето не трябва да съхранява Unicode символи. Например, varchar може да се използва за съхраняване на имейл адреси, тъй като те обикновено съдържат само ASCII знаци.
Низ с фиксирана дължина char (N)
и
nchar (N)
Този тип се различава от низ с променлива дължина по това, че ако низът е по-малък от N знака, тогава той винаги се допълва вдясно до дължината от N с интервали и се съхранява в базата данни в тази форма, т.е. той заема точно N знака в базата данни (където един знак заема 1 байт за char и 2 байта за nchar). В моята практика този тип се използва много рядко, а ако се използва, то се използва основно във формат char (1), т.е. когато полето е дефинирано от един знак.
цяло число международен Този тип ни позволява да използваме само цели числа в колоната, както положителни, така и отрицателни. За справка (сега това не е толкова релевантно за нас) - диапазонът от числа, който позволява типа int е от -2 147 483 648 до 2 147 483 647. Обикновено това е основният тип, който се използва за задаване на идентификатори.
Реално или реално число плува По-просто казано, това са числа, в които може да присъства десетична запетая (запетая).
дата дата Ако трябва да съхранявате само Датата в колоната, която се състои от три компонента: Число, Месец и Година. Например 15.02.2014 г. (15 февруари 2014 г.). Този тип може да се използва за колона „Дата на прием“, „Дата на раждане“ и т.н. в случаите, когато за нас е важно да фиксираме само датата, или когато компонентът за време не е важен за нас и може да бъде изхвърлен или ако не е известен.
Време време Този тип може да се използва, ако в колона трябва да се съхраняват само времеви данни, т.е. Часове, минути, секунди и милисекунди. Например, 17:38: 31.3231603
Например ежедневието „Час на излитане на полета“.
дата и час Време за среща Този тип ви позволява да запазвате едновременно дата и час. Например, 15.02.2014 17:38: 31.323
Например, това може да бъде дата и час на събитие.
Флаг малко Този тип е удобен за съхраняване на стойности като "Да" / "Не", където "Да" ще се съхранява като 1, а "Не" ще се съхранява като 0.

Също така стойността на полето, ако не е забранена, може да не бъде посочена, за целта се използва ключовата дума NULL.

За да изпълним примерите, нека създадем тестова база, наречена Test.

Може да се създаде проста база данни (без посочване на допълнителни параметри), като се изпълни следната команда:

СЪЗДАВАНЕ НА БАЗА ДАННИ Тест
Можете да изтриете базата данни с командата (трябва да сте много внимателни с тази команда):

Тест за DROP БАЗА ДАННИ
За да преминете към нашата база данни, можете да изпълните командата:

ИЗПОЛЗВАТЕ тест
Като алтернатива изберете Тестовата база данни от падащия списък в областта на менюто SSMS. Когато работя, често използвам този метод за превключване между бази.

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

СЪЗДАВАНЕ НА ТАБЛИЦА [Служители] ([Номер на персонал] int, [Пълно име] nvarchar (30), [Дата на раждане] дата, nvarchar (30), [Позиция] nvarchar (30), [Отдел] nvarchar (30))
В този случай трябва да поставим имената в квадратни скоби [...].

Но в базата данни, за по-голямо удобство, е по-добре да посочите всички имена на обекти на латинската азбука и да не използвате интервали в имената. В MS SQL обикновено в този случай всяка дума започва с главна буква, например за полето "Номер на персонала" бихме могли да зададем името PersonnelNumber. Можете също да използвате числа в името, например PhoneNumber1.

На бележка
В някои СУБД следният формат на именуване "PHONE_NUMBER" може да бъде по-предпочитан, например този формат често се използва в ORACLE DB. Естествено, при уточняване на името на полето е желателно то да не съвпада с ключовите думи, използвани в СУБД.

Поради тази причина можете да забравите за синтаксиса на квадратните скоби и да изтриете таблицата [Служители]:

ОТПУСКАНЕ НА ТАБЛИЦА [Служители]
Например, таблица със служители може да бъде наречена "Служители", а нейните полета могат да бъдат наречени по следния начин:

  • ID - Номер на персонала (ИД на служител)
  • Име - пълно име
  • Рожден ден - Дата на раждане
  • Имейл - Имейл
  • Позиция - Позиция
  • Отделение - Отделение
Много често думата ID се използва за име на полето за идентификация.

Сега нека създадем нашата таблица:

СЪЗДАВАНЕ НА ТАБЛИЦА Служители (ID int, Име nvarchar (30), Дата на рожден ден, Имейл nvarchar (30), Позиция nvarchar (30), Отдел nvarchar (30))
Можете да използвате опцията NOT NULL, за да посочите необходимите колони.

За съществуваща таблица полетата могат да бъдат предефинирани с помощта на следните команди:

Актуализиране на полето ID ALTER TABLE Employees ALTER COLUMN ID int NOT NULL - Актуализиране на полето за име ALTER TABLE Employees ALTER COLUMN Name nvarchar (30) NOT NULL

На бележка
Общата концепция на SQL езика за повечето СУБД остава същата (поне мога да преценя това по СУБД, с които съм работил). Разликата между DDL в различните СУБД се състои главно в типовете данни (тук не само имената им могат да се различават, но и детайлите на тяхното изпълнение), спецификата на внедряването на SQL езика също може да се различава леко (т.е. същността на командите са еднакви, но може да има леки разлики в диалекта, уви, но няма един стандарт). Познавайки основите на SQL, можете лесно да преминете от една СУБД към друга, т.к в този случай трябва само да разберете подробностите за изпълнението на командите в новата СУБД, т.е. в повечето случаи е достатъчна проста аналогия.

Създайте таблица CREATE TABLE Служители (ID int, - в ORACLE, типът int е еквивалентът (обвивка) за число (38) Име nvarchar2 (30), - nvarchar2 в ORACLE е еквивалентно на nvarchar в MS SQL Дата на рожден ден, имейл nvarchar2 (30 ) , Позиция nvarchar2 (30), Отдел nvarchar2 (30)); - актуализиране на полетата ID и Name (тук се използва MODIFY (...) вместо ALTER COLUMN) ALTER TABLE Служители МОДИФИРАТ (ID int NOT NULL, Name nvarchar2 (30) NOT NULL); - добавяне на PK (в този случай конструкцията изглежда като в MS SQL, ще бъде показана по-долу) ALTER TABLE Служители ДОБАВИ ОГРАНИЧЕНИЕ PK_Employees ПЪРВИЧЕН КЛЮЧ (ID);
За ORACLE има разлики по отношение на реализацията на типа varchar2, неговото кодиране зависи от настройките на базата данни и текстът може да бъде запазен, например, в UTF-8 кодиране. Освен това, дължината на полето в ORACLE може да се задава както в байтове, така и в знаци, за това се използват допълнителни опции BYTE и CHAR, които са посочени след дължината на полето, например:

ИМЕ varchar2 (30 BYTE) - капацитетът на полето ще бъде 30 байта ИМЕ varchar2 (30 CHAR) - капацитетът на полето ще бъде 30 знака
Коя опция ще се използва по подразбиране BYTE или CHAR, в случай на проста индикация на типа varchar2 (30) в ORACLE, зависи от настройките на базата данни, понякога може да бъде зададена и в настройките на IDE. Като цяло, понякога може лесно да се объркате, следователно, в случая с ORACLE, ако се използва тип varchar2 (и това понякога е оправдано тук, например при използване на UTF-8 кодиране), предпочитам изрично да пиша CHAR (тъй като обикновено е по-удобно да се чете дължината на низа в символи).

Но в този случай, ако таблицата вече съдържа някои данни, тогава за успешното изпълнение на командите е необходимо полетата ID и Name във всички редове на таблицата да бъдат попълнени. Нека демонстрираме това с пример, вмъкнете данни в таблицата в полетата ID, Позиция и Отдел, това може да стане със следния скрипт:

ВМЕСТЕ СЛУЖИТЕЛИ (ИД, позиция, отдел) СТОЙНОСТИ (1000, N „Директор“, N „Администрация“), (1001, N „Програмист“, N „ИТ“), (1002, N „Счетоводител“, N „Счетоводство“) ), (1003, N "старши програмист", N "ИТ")
В този случай командата INSERT също ще генерира грешка, тъй като при вмъкване не сме посочили стойността на необходимото поле Име.
Ако вече имахме тези данни в оригиналната таблица, тогава командата „ALTER TABLE Employees ALTER COLUMN ID int NOT NULL“ щеше да завърши успешно, а командата „ALTER TABLE Employees ALTER COLUMN Name int NOT NULL“ щеше да генерира съобщение за грешка , че има NULL (непосочени) стойности в полето Име.

Добавете стойности за полето Име и попълнете данните отново:


Също така, опцията NOT NULL може да се използва директно при създаване на нова таблица, т.е. в контекста на командата CREATE TABLE.

Първо, нека изтрием таблицата с помощта на командата:

DROP TABLE Служители
Сега нека създадем таблица със задължителни колони ID и Name:

СЪЗДАВАНЕ НА ТАБЛИЦА Служители (ID int NOT NULL, Име nvarchar (30) NOT NULL, Дата на рожден ден, Email nvarchar (30), Позиция nvarchar (30), Отдел nvarchar (30))
Можете също да напишете NULL след името на колоната, което ще означава, че стойностите NULL (не са посочени) ще бъдат разрешени в нея, но това не е необходимо, тъй като тази характеристика се приема по подразбиране.

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

ALTER TABLE Служители ALTER COLUMN Име nvarchar (30) NULL
Или просто:

ALTER TABLE Служители ALTER COLUMN Име nvarchar (30)
Също така, с тази команда можем да променим типа на полето на друг съвместим тип или да променим неговата дължина. Например, нека разширим полето Име до 50 знака:

ALTER TABLE Служители ALTER COLUMN Име nvarchar (50)

Първичен ключ

При създаването на таблица е желателно тя да има уникална колона или набор от колони, който е уникален за всеки от редовете й – записът може да бъде еднозначно идентифициран по тази уникална стойност. Тази стойност се нарича първичен ключ на таблицата. За нашата таблица „Служители“ такава уникална стойност може да бъде колоната ID (която съдържа „Номер на персонала на служителите“ – дори ако в нашия случай тази стойност е уникална за всеки служител и не може да бъде повторена).

Можете да създадете първичен ключ към съществуваща таблица с помощта на командата:

ПРОМЕНИ ТАБЛИЦА Служители ДОБАВЯНЕ НА ОГРАНИЧЕНИЕ PK_Служители ПЪРВИЧЕН КЛЮЧ (ИД)
Където "PK_Employees" е името на ограничението, отговорно за първичния ключ. Обикновено префиксът "PK_" се използва за именуване на първичния ключ, последван от името на таблицата.

Ако първичният ключ се състои от няколко полета, тогава тези полета трябва да бъдат изброени в скоби, разделени със запетаи:

ALTER TABLE table_name ADD CONSTRAINT име на ограничение ПЪРВЕН КЛЮЧ (поле1, поле2, ...)
Струва си да се отбележи, че в MS SQL всички полета, които са включени в първичния ключ, трябва да са НЕ NULL.

Също така първичният ключ може да бъде определен директно при създаване на таблицата, т.е. в контекста на командата CREATE TABLE. Нека изтрием таблицата:

DROP TABLE Служители
И тогава нека го създадем, използвайки следния синтаксис:

СЪЗДАВАНЕ НА ТАБЛИЦА Служители (ID int NOT NULL, Име nvarchar (30) NOT NULL, Дата на рожден ден, Email nvarchar (30), Позиция nvarchar (30), Отдел nvarchar (30), ОГРАНИЧЕНИЕ PK_Employees PRIMARY KEY (ID) - опишете PK в края на краищата полета като ограничение)
След създаването попълнете данните в таблицата:

ВМЕСТЕ СЛУЖИТЕЛИ (ИД, Длъжност, Отдел, Име) ЦЕННОСТИ (1000, N "Директор", N "Администрация", N "Иванов И.И."), (1001, N "Програмист", N "IT", N " Петров П.П. ), (1002, N" Счетоводител ", N" Счетоводство ", N" Сидоров SS "), (1003, N" Старши програмист ", N" IT ", N" Андреев А. А.")
Ако първичният ключ в таблицата се състои само от стойностите на една колона, тогава може да се използва следният синтаксис:

СЪЗДАВАНЕ НА ТАБЛИЦА Служители (ID int NOT NULL CONSTRAINT PK_Employees PRIMARY KEY, - посочете като характеристика на полето Име nvarchar (30) NOT NULL, Дата на рожден ден, Email nvarchar (30), Позиция nvarchar (30), Отдел nvarchar (30)
Всъщност името на ограничението може да бъде пропуснато, в който случай ще му бъде присвоено име на системата (като "PK__Employee__3214EC278DA42077"):

СЪЗДАВАНЕ НА ТАБЛИЦА Служители (ID int NOT NULL, Име nvarchar (30) NOT NULL, Дата на рожден ден, Email nvarchar (30), Позиция nvarchar (30), Отдел nvarchar (30), ОСНОВЕН КЛЮЧ (ID))
Или:

СЪЗДАВАНЕ НА ТАБЛИЦА Служители (ID int NOT NULL PRIMARY KEY, Име nvarchar (30) NOT NULL, Дата на рожден ден, Email nvarchar (30), Позиция nvarchar (30), Отдел nvarchar (30))
Но бих препоръчал винаги изрично да указвате името на ограничението за постоянни таблици, т.к с изрично дадено и разбираемо име, впоследствие ще бъде по-лесно да го манипулирате, например, можете да го изтриете:

ALTER TABLE Служители ОТПУСКАНЕ ОГРАНИЧЕНИЕТО PK_Служители
Но такъв кратък синтаксис, без посочване на имената на ограниченията, е удобен за използване при създаване на временни таблици на база данни (името на временната таблица започва с # или ##), които ще бъдат изтрити след употреба.

Нека обобщим

Досега разгледахме следните команди:
  • СЪЗДАЙТЕ ТАБЛИЦА table_name (изброяване на полета и техните типове, ограничения) - служи за създаване на нова таблица в текущата база данни;
  • ИЗПУСКАНЕ МАСА table_name - служи за изтриване на таблица от текущата база данни;
  • ПРОМЕНИ ТАБЛИЦАиме_на таблица ПРОМЕНИ КОЛОНА column_name... - използва се за актуализиране на типа на колона или за промяна на нейните настройки (например за определяне на характеристиката NULL или NOT NULL);
  • ПРОМЕНИ ТАБЛИЦАиме_на таблица ДОБАВЯНЕ НА ОГРАНИЧЕНИЕиме на ограничение ПЪРВИЧЕН КЛЮЧ(поле1, поле2, ...) - добавяне на първичен ключ към съществуваща таблица;
  • ПРОМЕНИ ТАБЛИЦАиме_на таблица ОТПУСКАНЕ ОГРАНИЧЕНИЕТО constraint_name - премахва ограничението от таблицата.

Малко за временните маси

Извадка от MSDN.Има два типа временни таблици в MS SQL Server: локални (#) и глобални (##). Локалните временни таблици са видими само за техните създатели, докато връзката с екземпляра на SQL Server приключи, веднага щом бъдат създадени за първи път. Локалните временни таблици се отпадат автоматично, след като потребителят прекъсне връзката с екземпляр на SQL Server. Глобалните временни таблици са видими за всички потребители по време на всякакви сесии на свързване, след като тези таблици са създадени, и се отпадат, когато всички потребители, препращащи тези таблици, прекъснат връзката от екземпляра на SQL Server.

Временните таблици се създават в системната база данни tempdb, т.е. като ги създаваме, ние не замърсяваме основната база, в противен случай временните таблици са напълно идентични с обикновените таблици, те също могат да бъдат изхвърлени с помощта на командата DROP TABLE. По-често се използват локални (#) временни таблици.

Можете да използвате командата CREATE TABLE, за да създадете временна таблица:

СЪЗДАВАНЕ НА ТАБЛИЦА #Temp (ID int, Име nvarchar (30))
Тъй като временната таблица в MS SQL е подобна на обикновена таблица, можете също да я пуснете сами с командата DROP TABLE:

ТАБЛИЦА ИЗПУСКАНЕ #Темп

Също така, временна таблица (като самата обикновена таблица) може да бъде създадена и незабавно попълнена с данни, върнати от заявка, използвайки синтаксиса SELECT ... INTO:

SELECT ID, Name INTO #Temp FROM Employees

На бележка
Внедряването на временни таблици може да се различава в различните СУБД. Например, в СУБД ORACLE и Firebird структурата на временните таблици трябва да бъде предварително дефинирана с командата CREATE GLOBAL TEMPORARY TABLE, указваща спецификата на съхраняване на данни в нея, след което потребителят я вижда сред основните таблици и работи с нея както с обикновена маса.

Нормализиране на базата данни - разделяне на подтаблици (справочници) и дефиниране на връзки

Нашата текуща таблица за служители има недостатъка, че в полетата "Позиция" и "Отдел" потребителят може да въведе всеки текст, който е изпълнен предимно с грешки, тъй като един служител може просто да посочи "ИТ" като отдел, а втори служител, например, въведете "ИТ отдел", на трети "ИТ". В резултат на това ще бъде неясно какво е имал предвид потребителят, т.е. Тези служители служители на един и същи отдел ли са или самият потребител е описан и това са 3 различни отдела? Освен това в този случай няма да можем правилно да групираме данните за някакъв отчет, където може да се изисква да се покаже броят на служителите в контекста на всеки отдел.

Вторият недостатък е обемът на съхранение на тази информация и нейното дублиране, т.е. за всеки служител се посочва пълното име на отдела, което изисква място в базата данни за съхраняване на всеки знак от името на отдела.

Третият недостатък е сложността на актуализирането на тези полета, ако се промени заглавието на позиция, например, ако трябва да преименувате позицията „Програмист“ на „Младши програмист“. В този случай ще трябва да направим промени във всеки ред от таблицата, в който Позицията е равна на „Програмист“.

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

Нека създадем 2 таблици "Позиции" и "Отдели", като първата ще се нарича Позиции, а втората, съответно, Отдели:

СЪЗДАВАНЕ НА ТАБЛИЦА Позиции (ID int IDENTITY (1,1) NOT NULL CONSTRAINT PK_Positions PRIMARY KEY, Name nvarchar (30) NOT NULL) СЪЗДАВАНЕ НА ТАБЛИЦА Отдели (ID int IDENTITY (1,1) NOT NULL CONSTRAINT PK_Departments Name PRIMARY KcharEY (Име PRIMARY KcharEY ) НЕ НУЛА)
Имайте предвид, че тук сме използвали новата опция IDENTITY, която казва, че данните в колоната ID ще бъдат номерирани автоматично, започвайки от 1, със стъпка от 1, т.е. при добавяне на нови записи, на тях ще бъдат последователно присвоени стойности 1, 2, 3 и т.н. Такива полета обикновено се наричат ​​автоматично нарастващи. Само едно поле със свойството IDENTITY може да бъде дефинирано в таблица и обикновено, но не непременно, такова поле е първичният ключ за тази таблица.

На бележка
В различните СУБД реализацията на полета с брояч може да се извърши по свой собствен начин. В MySQL, например, такова поле се дефинира с помощта на опцията AUTO_INCREMENT. В ORACLE и Firebird по-рано тази функционалност може да се емулира с помощта на SEQUENCE. Но доколкото знам, ORACLE вече добави опцията GENERATED AS IDENTITY.

Нека попълним тези таблици автоматично въз основа на текущите данни, записани в полетата Позиция и Отдел на таблицата Служители:

Попълнете полето Име на таблицата Позиции с уникални стойности от полето Позиция на таблицата Служители INSERT Positions (Име) SELECT DISTINCT Position FROM Employees WHERE Position IS NOT NULL - изхвърлете записи, чиято позиция не е посочена
Нека направим същото за таблицата на отделите:

ВМЕСТЕ отдели (име) ИЗБЕРЕТЕ РАЗЛИЧЕН отдел ОТ служители, КЪДЕТО Отдел НЕ Е NULL
Ако сега отворим таблиците позиции и отдели, ще видим номериран набор от стойности за полето ID:

ИЗБЕРЕТЕ * ОТ Позиции

ИЗБЕРЕТЕ * ОТ отдели

Тези таблици вече ще играят ролята на справочници за разпределяне на длъжности и отдели. Сега ще се позоваваме на идентификаторите на длъжности и отдели. Първо, нека създадем нови полета в таблицата Employees за съхраняване на данните за идентификатор:

Добавете поле за ID на позицията ALTER TABLE Employees ADD PositionID int - добавете поле за ID на отдела ALTER TABLE Employees ADD DepartmentID int
Типът на референтните полета трябва да е същият като в препратките, в този случай е int.

Можете също така да добавите няколко полета към таблицата наведнъж с една команда, като изброите полетата, разделени със запетаи:

ПРОМЕНИ ТАБЛИЦА Служители ДОБАВИ PositionID int, DepartmentID int
Сега ще напишем връзки (референтни ограничения - ВЪНШЕН КЛЮЧ) за тези полета, така че потребителят да не може да напише в тези полета стойностите, които липсват сред стойностите на идентификатора, намерени в справочниците.

ПРОМЕНИ ТАБЛИЦА Служители ДОБАВЯНЕ НА ОГРАНИЧЕНИЕ FK_Employees_PositionID ВЪНШЕН КЛЮЧ (PositionID) СПРАВКИ Позиции (ID)
И ние ще направим същото за второто поле:

ПРОМЕНИ ТАБЛИЦА Служители ДОБАВЯНЕ НА ОГРАНИЧЕНИЕ FK_Employees_DepartmentID ВЪНШЕН КЛЮЧ (DepartmentID) СПРАВКИ Отдели (ID)
Сега потребителят ще може да въвежда само стойности на ID от съответната директория в тези полета. Съответно, за да използва нов отдел или позиция, той първо ще трябва да добави нов запис към съответната директория. Защото позициите и отделите вече се съхраняват в директории в едно копие, след което, за да промените името, е достатъчно да го промените само в директорията.

Името на референтното ограничение обикновено е съставно, то се състои от префикса "FK_", след което следва името на таблицата, а след долното подчертаване има името на полето, което се отнася до идентификатора на референтната таблица.

Идентификаторът (ID) обикновено е вътрешна стойност, която се използва само за връзки и каква стойност се съхранява там в повечето случаи е абсолютно безразлично, така че не е нужно да се опитвате да се отървете от дупки в последователността от числа, които възникват по време на работа с таблицата, например след изтриване на записи от справочника.

ALTER TABLE table ADD CONSTRAINT име на ограничение ВЪНШЕН КЛЮЧ (поле1, поле2, ...) REFERENCES референтна_таблица (поле1, поле2, ...)
В този случай в таблицата "dir_table" първичният ключ е представен от комбинация от няколко полета (поле1, поле2, ...).

Всъщност, сега нека актуализираме полетата PositionID и DepartmentID със стойностите на ID от директориите. Нека използваме командата DML UPDATE за тази цел:

АКТУАЛИЗИРАНЕ e SET PositionID = (ИЗБЕРЕТЕ ИД ОТ Позиции, КЪДЕТО Име = д.Позиция), ИД на отдел = (ИЗБЕРЕТЕ ИД ОТ отдели, КЪДЕТО Име = e.Отдел) ОТ Служители e
Нека видим какво се случи, като изпълним заявката:

ИЗБЕРЕТЕ * ОТ Служители

Това е всичко, полетата PositionID и DepartmentID се попълват в съответствие с позициите и отделите с идентификатори, няма нужда от полетата Позиция и Отдел в таблицата Служители, можете да изтриете тези полета:

ПРОМЕНИ ТАБЛИЦА Служители ОТПУСКАНЕ КОЛОНА Позиция, отдел
Сега таблицата е придобила следния вид:

ИЗБЕРЕТЕ * ОТ Служители

документ за самоличност име рожден ден електронна поща PositionID ИД на отдел
1000 Иванов И.И. НУЛА НУЛА 2 1
1001 Петров П.П. НУЛА НУЛА 3 3
1002 Сидоров С.С. НУЛА НУЛА 1 2
1003 Андреев А.А. НУЛА НУЛА 4 3

Тези. в резултат на това се отървахме от съхранението на излишна информация. Сега, по номерата на длъжността и отделите, можем еднозначно да определим имената им, като използваме стойностите в референтните таблици:

ИЗБЕРЕТЕ e.ID, e.Name, p.Name PositionName, d.Name DepartmentName FROM Employees e LEFT JOIN Отдели d ON d.ID = e.DepartmentID LEFT JOIN Positions p ON p.ID = e.PositionID

В инспектора на обекти можем да видим всички обекти, създадени за тази таблица. От тук можете да извършвате различни манипулации с тези обекти - например да преименувате или изтривате обекти.

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

ПРОМЕНИ ТАБЛИЦА Служители ДОБАВИ ИД на мениджър вн
В това поле е разрешено NULL, полето ще бъде празно, ако например няма началници над служителя.

Сега нека създадем ВЪНШЕН КЛЮЧ в таблицата Employees:

ПРОМЕНИ ТАБЛИЦА Служители ДОБАВЯНЕ НА ОГРАНИЧЕНИЕ FK_Employees_ManagerID ВЪНШЕН КЛЮЧ (ИД на мениджъра) СПРАВКИ Служители (ID)
Нека сега да създадем диаграма и да видим как изглеждат връзките между нашите таблици върху нея:

В резултат на това трябва да видим следната картина (таблицата „Служители“ е свързана с таблиците „Позиции“ и „Деперти“ и се отнася също за себе си):

И накрая, трябва да се каже, че референтните ключове могат да включват допълнителни опции ON DELETE CASCADE и ON UPDATE CASCADE, които казват как да се държат при изтриване или актуализиране на запис, който е посочен в референтната таблица. Ако тези опции не са посочени, тогава не можем да променим идентификатора в референтната таблица за записа, към който има връзки от друга таблица, също така няма да можем да изтрием такъв запис от препратката, докато не изтрием всички редове, отнасящи се до този запис или ще актуализираме връзките в тези редове до различна стойност.

Например, нека пресъздадем таблицата с опцията ON DELETE CASCADE за FK_Employees_DepartmentID:

DROP TABLE Служители СЪЗДАВАНЕ НА ТАБЛИЦА Служители (ID int NOT NULL, Име nvarchar (30), Дата на рожден ден, Email nvarchar (30), PositionID int, DepartmentID int, ManagerID int, CONSTRAINT PK_Employees PRIMARY KEY (30), CONSTRAID KEYFORD_Departy_Department ) РЕФЕРЕНЦИИ Отдели (ID) ON DELETE CASCADE, CONSTRAINT FK_Employees_PositionID ВЪНШЕН КЛЮЧ (PositionID) REFERENCES Позиции (ID), CONSTRAINT FK_Employees_ManagerID FOREIGN KEY (ManagerID) REFERENCES (ManagerID) REFERENCES (Идентификатори на мениджъра) REFERENCES (ПОЗИЦИЯ 0, 1 Идентификационни номера) Employ0, N POSIV1, "19550219", 2,1, NULL), (1001, N "Петров PP", "19831203", 3,3,1003), (1002 , N "Сидоров SS", "19760607", 1,2,1000) , (1003, N "Андреев AA", "19820417", 4,3,1000)
Нека изтрием отдела с идентификатор 3 от таблицата Отдели:

ИЗТРИВАНЕ на отдели, където ID = 3
Нека разгледаме данните в таблицата на служителите:

ИЗБЕРЕТЕ * ОТ Служители

документ за самоличност име рожден ден електронна поща PositionID ИД на отдел ManagerID
1000 Иванов И.И. 1955-02-19 НУЛА 2 1 НУЛА
1002 Сидоров С.С. 1976-06-07 НУЛА 1 2 1000

Както можете да видите, данните за отдел 3 също са изтрити от таблицата Служители.

Опцията ON UPDATE CASCADE се държи по подобен начин, но работи, когато стойността на ID в справката се актуализира. Например, ако променим идентификатора на позиция в директорията на заданията, тогава DepartmentID в таблицата служители ще бъде актуализиран до новата стойност на ID, която сме посочили в директорията. Но в този случай просто няма да е възможно да се демонстрира това, т.к колоната ID в таблицата Departments има опцията IDENTITY, която няма да ни позволи да изпълним следната заявка (промяна на ID на отдел 3 на 30):

АКТУАЛИЗИРАНЕ Отдели SET ID = 30 WHERE ID = 3
Основното нещо е да разберете същността на тези 2 опции НА ИЗТРИВАНЕ НА КАСКАДА и НА АКТУАЛИЗИРАНЕ НА КАСКАДА. Използвам тези опции в много редки случаи и ви препоръчвам да помислите внимателно, преди да ги използвате в референтно ограничение. ако случайно изтриете запис от таблицата за търсене, това може да доведе до големи проблеми и да създаде верижна реакция.

Да възстановим отдел 3:

Дайте разрешение за добавяне/промяна на стойност на IDENTITY. SET IDENTITY_INSERT Departments ON INSERT Departments (ID, Name) VALUES (3, N "IT") - забранява добавянето/промяната на IDENTITY стойност SET IDENTITY_INSERT Departments OFF
Нека почистим напълно таблицата Employees с помощта на командата TRUNCATE TABLE:

ТАБЛИЦА ОТСЪЖЕНЕ Служители
И отново, презаредете данните в него, като използвате предишната команда INSERT:

ВЪВЕТЕ СЛУЖИТЕЛИ (ID, Име, Рожден ден, PositionID, DepartmentID, ManagerID) СТОЙНОСТИ (1000, N "Иванов I.I.", "19550219", 2,1, NULL), (1001, N "Петров П.П.", "19831203", 3 ,3,1003), (1002, N "Сидоров SS", "19760607", 1,2,1000), (1003, N "Андреев AA", "19820417" , 4,3,1000)

Нека обобщим

В момента, доколкото ни е известно, са добавени още няколко DDL команди:
  • Добавяне на свойството IDENTITY към поле - позволява ви да направите това поле автоматично попълнено (поле на брояча) за таблицата;
  • ПРОМЕНИ ТАБЛИЦАиме_на таблица ДОБАВЯНЕ list_of_fields_with_characteristics - позволява ви да добавяте нови полета към таблицата;
  • ПРОМЕНИ ТАБЛИЦАиме_на таблица КОЛОНА ИЗПУСКАНЕ list_of_field - ви позволява да изтривате полета от таблицата;
  • ПРОМЕНИ ТАБЛИЦАиме_на таблица ДОБАВЯНЕ НА ОГРАНИЧЕНИЕиме на ограничение ВЪНШЕН КЛЮЧ(поля) ПРЕПРАТКИреферентна_таблица (полета) - ви позволява да дефинирате връзката между таблицата и референтната таблица.

Други ограничения - УНИКАЛНО, ПО ПОДРАЗБИРАНЕ, ПРОВЕРКА

С ограничението UNIQUE можете да кажете, че стойностите за всеки ред в дадено поле или набор от полета трябва да бъдат уникални. В случая с таблицата Служители можем да наложим такова ограничение на полето Имейл. Просто попълнете предварително имейл със стойности, ако те вече не са дефинирани:

АКТУАЛИЗИРАНЕ Служители ЗАДАДЕТЕ Имейл = " [защитен с имейл]"WHERE ID = 1000 АКТУАЛИЗИРАНЕ Служители SET Email =" [защитен с имейл]"WHERE ID = 1001 АКТУАЛИЗИРАНЕ Служители SET Email =" [защитен с имейл]"WHERE ID = 1002 АКТУАЛИЗИРАНЕ Служители SET Email =" [защитен с имейл]„КЪДЕ ID = 1003
И сега можете да наложите ограничение за уникалност на това поле:

ПРОМЕНИ ТАБЛИЦА Служители ДОБАВЯНЕ НА ОГРАНИЧЕНИЕ UQ_Employees_Имейл УНИКАЛЕН (Имейл)
Сега потребителят няма да може да въвежда един и същ имейл за няколко служители.

Ограничението за уникалност обикновено се именува по следния начин – първо идва префиксът „UQ_“, след това името на таблицата, а след долното подчертаване има името на полето, върху което се прилага това ограничение.

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

ALTER TABLE име_на_таблица ДОБАВЯНЕ НА ОГРАНИЧЕНИЕ име_на_ограничение УНИКАЛНО (поле1, поле2, ...)
Чрез добавяне на ограничение DEFAULT към полето, можем да зададем стойност по подразбиране, която ще бъде заместена, ако при вмъкване на нов запис това поле не е в списъка с полета на командата INSERT. Това ограничение може да се зададе директно при създаване на таблица.

Нека добавим ново поле за дата на назначение към таблицата Employees и го назовем HireDate и да кажем, че стойността по подразбиране за това поле е текущата дата:

ПРОМЕНИ ТАБЛИЦАТА Служители ДОБАВЯНЕ Дата на наемане NOT NULL DEFAULT SYSDATETIME ()
Или ако колоната HireDate вече съществува, тогава може да се използва следният синтаксис:

ПРОМЕНИ ТАБЛИЦА Служители ДОБАВЯНЕ НА SYSDATETIME () ЗА Дата на наемане
Тук не посочих името на ограничението, тъй като при DEFAULT бях на мнение, че това не е толкова критично. Но ако го правиш по приятелски начин, тогава, според мен, не трябва да бъдеш мързелив и трябва да дадеш нормално име. Това се прави по следния начин:

ПРОМЕНИ ТАБЛИЦА Служители ДОБАВЯНЕ НА ОГРАНИЧЕНИЕ DF_Employees_HireDate ПО ПОДРАЗБИРАНЕ SYSDATETIME () FOR HireDate
Тъй като тази колона не е съществувала преди, когато се добави към всеки запис, стойността на текущата дата ще бъде вмъкната в полето HireDate.

При добавяне на нов запис, текущата дата също ще се вмъкне автоматично, разбира се, ако не я зададем изрично, т.е. няма да бъде посочено в списъка с колони. Нека покажем това с пример, без да указваме полето HireDate в списъка с добавени стойности:

ВЪВЕДЕТЕ СЛУЖИТЕЛИ (ИД, Име, Имейл) СТОЙНОСТИ (1004, N "Sergeev S.S.", " [защитен с имейл]")
Да видим какво се случи:

ИЗБЕРЕТЕ * ОТ Служители

документ за самоличност име рожден ден електронна поща PositionID ИД на отдел ManagerID Дата на наемане
1000 Иванов И.И. 1955-02-19 [защитен с имейл] 2 1 НУЛА 2015-04-08
1001 Петров П.П. 1983-12-03 [защитен с имейл] 3 4 1003 2015-04-08
1002 Сидоров С.С. 1976-06-07 [защитен с имейл] 1 2 1000 2015-04-08
1003 Андреев А.А. 1982-04-17 [защитен с имейл] 4 3 1000 2015-04-08
1004 Сергеев С.С. НУЛА [защитен с имейл] НУЛА НУЛА НУЛА 2015-04-08

Ограничението CHECK се използва, когато е необходимо да се проверят стойностите, вмъкнати в полето. Например, нека наложим това ограничение върху полето за номер на персонала, което е идентификаторът (ID) на служителя. Използвайки това ограничение, да кажем, че броят на персонала трябва да има стойност между 1000 и 1999:

ПРОМЕНИ ТАБЛИЦА Служители ДОБАВЯНЕ НА ОГРАНИЧЕНИЕ CK_Employees_ID ПРОВЕРКА (ID МЕЖДУ 1000 И 1999)
Ограничението обикновено се нарича същото, първо идва префиксът "CK_", след това името на таблицата и името на полето, върху което е наложено това ограничение.

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

ВЪВЕДЕТЕ СЛУЖИТЕЛИ (ИД, имейл) СТОЙНОСТИ (2000, " [защитен с имейл]")
Сега нека променим вмъкнатата стойност на 1500 и се уверим, че записът е вмъкнат:

ВМЕСТЕ СЛУЖИТЕЛИ (ИД, имейл) СТОЙНОСТИ (1500, " [защитен с имейл]")
Можете също така да създадете ограничения UNIQUE и CHECK, без да посочвате име:

ALTER TABLE Служители ДОБАВЯНЕ НА УНИКАЛНО (ИМЕЙЛ) ALTER TABLE Служители ДОБАВЯНЕ НА ПРОВЕРКА (ID МЕЖДУ 1000 И 1999)
Но това не е добра практика и е по-добре да посочите името на ограничението изрично, т.к за да го разберете по-късно, което ще бъде по-трудно, ще трябва да отворите обекта и да видите за какво е отговорен.

С добро име много информация за ограничението може да бъде разпозната директно по името му.

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

DROP TABLE Служители
И ние ще го пресъздадем с всички създадени ограничения с една команда CREATE TABLE:

CREATE TABLE Employees (ID int NOT NULL, Name nvarchar (30), Дата на рожден ден, Email nvarchar (30), PositionID int, DepartmentID int, HireDate date NOT NULL DEFAULT SYSDATETIME (), - за DEFAULT ще хвърля CONSTRAINT изключение PRI_Employe (ID), CONSTRAINT FK_Employees_DepartmentID FOREIGN KEY (DepartmentID) REFERENCES Отдели (ID), CONSTRAINT FK_Employees_PositionID ВЪНШЕН КЛЮЧ (PositionID) REFERENCES Позиции (ID), CONSTRAINT UQ_EmployeesQUEUE (Имейл)

ВЪВЕТЕ СЛУЖИТЕЛИ (ИД, Име, Рожден ден, Имейл, PositionID, DepartmentID) СТОЙНОСТИ (1000, N "Иванов И.И.", "19550219", " [защитен с имейл]", 2,1), (1001, Н" Петров П.П. "," 19831203 "," [защитен с имейл]", 3,3), (1002, Н" Сидоров С. С. "," 19760607 "," [защитен с имейл]", 1,2), (1003, N" Андреев A.A. "," 19820417 "," [защитен с имейл]",4,3)

Малко за индексите, създадени при създаване на ограничения PRIMARY KEY и UNIQUE

Както можете да видите на екранната снимка по-горе, при създаване на ограничения PRIMARY KEY и UNIQUE, индекси със същите имена (PK_Employees и UQ_Employees_Email) бяха автоматично създадени. По подразбиране индексът за първичния ключ се създава като CLUSTERED, а за всички останали индекси като NONCLUSTERED. Трябва да се каже, че не всички СУБД имат концепцията за клъстериран индекс. Една таблица може да има само един CLUSTERED индекс. CLUSTERED - означава, че записите в таблицата ще бъдат сортирани по този индекс, можете също да кажете, че този индекс има директен достъп до всички данни от таблицата. Това е основният индекс на таблицата, така да се каже. По-грубо, това е индекс, закрепен с болтове към масата. Клъстерираният индекс е много мощен инструмент, който може да ви помогне да оптимизирате заявките си, просто имайте това предвид засега. Ако искаме да кажем на клъстерирания индекс да се използва не в първичния ключ, а за друг индекс, тогава когато създаваме първичния ключ, трябва да посочим опцията NONCLUSTERED:

ALTER TABLE име_на_таблица ДОБАВЯНЕ НА ОГРАНИЧЕНИЕ име_на_ограничение ПЪРВИЧЕН КЛЮЧ НЕКЛУСТРИРАН (поле1, поле2, ...)
Например, нека направим ограничителния индекс PK_Employees неклъстериран, а индексът на ограничението UQ_Employees_Email - клъстериран. На първо място, ще премахнем тези ограничения:

ALTER TABLE Служители DROP ОГРАНИЧЕНИЕ PK_Employees ALTER TABLE Служители DROP ОГРАНИЧЕНИЕ UQ_Employees_Email
Сега нека ги създадем с опциите CLUSTERED и NONCLUSTERED:

ALTER TABLE Служители ДОБАВЯНЕ НА ОГРАНИЧЕНИЕ PK_Служители ПЪРВИЧЕН КЛЮСТ НЕКЛУСТРИРАН (ИД) ПРОМЕНИ ТАБЛИЦА Служители ДОБАВЯНЕ НА ОГРАНИЧЕНИЕ UQ_Employees_Email УНИКАЛЕН КЛУСТРИРАН (Имейл)
Сега, след извличане от таблицата Employees, можем да видим, че записите са сортирани по клъстерирания индекс UQ_Employees_Email:

ИЗБЕРЕТЕ * ОТ Служители

документ за самоличност име рожден ден електронна поща PositionID ИД на отдел Дата на наемане
1003 Андреев А.А. 1982-04-17 [защитен с имейл] 4 3 2015-04-08
1000 Иванов И.И. 1955-02-19 [защитен с имейл] 2 1 2015-04-08
1001 Петров П.П. 1983-12-03 [защитен с имейл] 3 3 2015-04-08
1002 Сидоров С.С. 1976-06-07 [защитен с имейл] 1 2 2015-04-08

Преди това, когато индексът PK_Employees беше клъстериран индекс, записите бяха сортирани по ID по подразбиране.

Но в този случай това е само пример, който показва същността на клъстерирания индекс, тъй като най-вероятно ще бъдат направени заявки към таблицата Employees от полето ID, а в някои случаи тя самата може да действа като справочник.

За справки обикновено е препоръчително клъстерираният индекс да бъде изграден върху първичния ключ, тъй като в заявките често се позоваваме на идентификатор на директория, за да получим например името (Позиция, Отдел). Тук припомняме това, което написах по-горе, че клъстерираният индекс има директен достъп до редовете на таблицата и от това следва, че можем да получим стойността на всяка колона без допълнителни разходи.

Изгодно е да приложите клъстериран индекс към полета с най-често извадка.

Понякога ключ се създава в таблици от заместващо поле, в който случай е полезно да запазите опцията CLUSTERED index за по-подходящ индекс и да посочите опцията NONCLUSTERED при създаване на сурогатен първичен ключ.

Нека обобщим

На този етап се запознахме с всички видове ограничения, в най-простата им форма, които се създават чрез команда от формата "ALTER TABLE table_name ADD CONSTRAINT constraint_name ...":
  • ПЪРВИЧЕН КЛЮЧ- първичен ключ;
  • ВЪНШЕН КЛЮЧ- създаване на връзки и контрол на референтната цялост на данните;
  • ЕДИНСТВЕН ПО РОДА СИ- ви позволява да създавате уникалност;
  • ПРОВЕРЕТЕ- позволява коректността на въведените данни;
  • ПО ПОДРАЗБИРАНЕ- ви позволява да зададете стойността по подразбиране;
  • Също така си струва да се отбележи, че всички ограничения могат да бъдат премахнати с помощта на командата „ ПРОМЕНИ ТАБЛИЦАиме_на таблица ОТПУСКАНЕ ОГРАНИЧЕНИЕТОиме на ограничение ".
Също така частично засегнахме темата за индексите и анализирахме концепцията за клъстер ( СКЛОПИРАНИ) и негрупирани ( НЕКЛУСТРИРАНИ) индекс.

Създайте самостоятелни индекси

Разчитането на собствени сили тук се отнася до индекси, които не са създадени за ограничение PRIMARY KEY или UNIQUE.

Индекси по поле или полета могат да бъдат създадени със следната команда:

CREATE INDEX IDX_Employees_Name ON Служители (име)
Също така тук можете да посочите опциите CLUSTERED, NONCLUSTERED, UNIQUE и можете също да посочите посоката на сортиране за всяко отделно поле ASC (по подразбиране) или DESC:

СЪЗДАЙТЕ УНИКАЛЕН НЕКЛУСТРИРАН ИНДЕКС UQ_Employees_EmailDesc ON Employees (Email DESC)
Когато създавате неклъстериран индекс, опцията NONCLUSTERED може да бъде освободена, защото това е по подразбиране и се показва тук просто, за да посочи позицията на опцията CLUSTERED или NONCLUSTERED в командата.

Можете да изтриете индекса със следната команда:

DROP INDEX IDX_Employees_Name ON Служители
Прости индекси, като ограничения, могат да бъдат създадени в контекста на командата CREATE TABLE.

Например, нека пуснем отново таблицата:

DROP TABLE Служители
И ние ще го пресъздадем с всички създадени ограничения и индекси с една команда CREATE TABLE:

СЪЗДАВАНЕ НА ТАБЛИЦА Служители (ID int NOT NULL, Име nvarchar (30), Дата на рожден ден, Email nvarchar (30), PositionID int, DepartmentID int, HereDate date NOT NULL CONSTRAINT DF_Employees_HireDate DEFAULT SYSDATEtTIME, CONSTRAMAID SYSDATETIME, COENTRAMA CONSTRAINT FK_Employees_DepartmentID ВЪНШЕН КЛЮЧ (DepartmentID) РЕФЕРЕНЦИИ Отдели (ID), CONSTRAINT FK_Employees_PositionID ВЪНШЕН КЛЮЧ (PositionID) РЕФЕРЕНЦИИ Позиции (ID), CONSTRAINT FK_Employees_ManagerID 9 (Име на служителите_Име_Мениджър_Име_на_Име_на_Мениджър)
И накрая, нека вмъкнем нашите служители в таблицата:

ВЪВЕТЕ СЛУЖИТЕЛИ (ИД, Име, Рожден ден, Имейл, PositionID, DepartmentID, ManagerID) СТОЙНОСТИ (1000, N "Иванов И.И.", "19550219", " [защитен с имейл]", 2,1, NULL), (1001, N" Петров П.П. "," 19831203 "," [защитен с имейл]", 3,3,1003), (1002, Н" Сидоров С.С. "," 19760607 "," [защитен с имейл]", 1,2,1000), (1003, N" Андреев A.A. "," 19820417 "," [защитен с имейл]",4,3,1000)
Освен това си струва да се отбележи, че можете да включите стойности в неклъстериран индекс, като ги посочите в INCLUDE. Тези. в този случай индексът INCLUDE донякъде ще прилича на клъстериран индекс, само че сега индексът не е прикрепен към таблицата, но необходимите стойности са прикрепени към индекса. Съответно, такива индекси могат значително да подобрят производителността на заявките за избор (SELECT), ако всички изброени полета присъстват в индекса, тогава може изобщо да не е необходимо достъп до таблицата. Но това естествено увеличава размера на индекса, т.к стойностите на изброените полета се дублират в индекса.

Извадка от MSDN.Общ команден синтаксис за създаване на индекси

СЪЗДАВАЙТЕ [УНИКАЛНО] [КЛУСТРИРАНО | NONCLUSTERED] INDEX index_name ON (колона [ASC | DESC] [, ... n]) [ВКЛЮЧВАНЕ (име на_колона [, ... n])]

Нека обобщим

Индексите могат да увеличат скоростта на извличане на данни (SELECT), но индексите забавят скоростта на промяна на данните в таблицата, т.к. след всяка модификация, системата ще трябва да изгради отново всички индекси за конкретна таблица.

Препоръчително е във всеки случай да се намери оптималното решение, златната среда, така че както производителността на извадката, така и модификацията на данните да са на правилното ниво. Стратегията за създаване на индекси и техният брой могат да зависят от много фактори, като например колко често се променят данните в таблицата.

DDL Заключение

Както можете да видите, DDL не е толкова сложен, колкото може да изглежда на пръв поглед. Тук успях да покажа почти всичките му основни конструкции, използвайки само три таблици.

Основното нещо е да разберете същността, а останалото е въпрос на практика.

Успех с този прекрасен език, наречен SQL.

Структуриран език за заявки или SQLе декларативен език за програмиране за използване в квазирелационни бази данни. Много от оригиналните функции на SQL са взети за изчисление на кортежи, но последните разширения на SQL включват все повече и повече релационна алгебра.
SQL първоначално е създаден от IBM, но много доставчици са разработили свои собствени диалекти. Той е приет като стандарт от Американския национален институт по стандартизация (ANSI) през 1986 г. и ISO през 1987 г. В стандарта за език за програмиране на SQL, ANSI заяви, че официалното произношение на SQL е "es que el". Въпреки това, много в базата данни използваха жаргонното произношение на Sequel, което отразява оригиналното име на езика, Sequel, което по-късно беше променено поради конфликт на марка и име между IBM. Програмиране за начинаещи.
SQL език за програмиранее преработена през 1992 г. и тази версия е известна като SQL-92 in. След това 1999 г. беше ревизирана отново, за да стане SQL: 1999 (известен още като SQL3). Програмиране за манекени. SQL 1999 поддържа обекти, които преди това не са били поддържани в други версии, но едва в края на 2001 г. само няколко системи за управление на бази данни поддържат SQL реализации: 1999 г.
SQL, въпреки че е дефиниран като ANSI и ISO, има много вариации и разширения, повечето от които имат свои собствени характеристики, като PL / SQL реализацията на Oracle Corporation или реализацията на Sybase и Transact-SQL на Microsoft, което може да обърка основите на програмирането. Също така не е необичайно за търговските реализации да пропускат поддръжката за основните характеристики на стандарта, такива типове данни като дата и час, предпочитайки собствена версия. В резултат на това, за разлика от ANSI C или ANSI Fortran, които обикновено могат да се пренасят от платформа на платформа без големи структурни промени, SQL заявките рядко могат да се пренасят между различни системи за бази данни без големи модификации. Повечето хора в областта на базата данни смятат, че тази липса на съвместимост е умишлена, за да предостави на всеки разработчик своя собствена система за управление на база данни и да обвърже клиента с конкретна база данни.
Както подсказва името, езикът за програмиране на SQL е предназначен за специфична, ограничена цел - запитване на данни, съдържащи се в релационна база данни. Като такъв, това е набор от инструкции за програмен език за създаване на извадки от данни, а не процедурен език като C или BASIC, които са предназначени да решават много по-широк кръг от проблеми. Езикови разширения като "PL / SQL" са предназначени да се справят с това ограничение чрез добавяне на процедурни елементи за SQL, като същевременно се запазват предимствата на SQL. Друг подход е да се позволи на SQL заявките да вграждат команди на процедурния език за програмиране и да взаимодействат с базата данни. Например Oracle и други поддържат езика Java в база данни, докато PostgreSQL ви позволява да пишете функции на Perl, Tcl или C.
Една шега за SQL: "SQL не е нито структуриран, нито език." Шегата е, че SQL не е език на Тюринг. ...

Изберете * от T
C1 C2
1 а
2 б
C1 C2
1 а
2 б
Изберете C1 от T
C1
1
2
C1 C2
1 а
2 б
Изберете * от T, където C1 = 1
C1 C2
1 а

Като се има предвид таблица T, заявката Select * from T ще покаже всички елементи на всички редове в таблицата.
От същата таблица, заявката Select C1 from T ще покаже елементите от колона C1 на всички редове в таблицата.
От същата таблица, заявката Select * from T where C1 = 1 ще покаже всички елементи от всички редове, където стойността на колона C1 е "1".

SQL ключови думи

SQL думите са разделени на няколко групи.

Първият е Език за манипулиране на данни или DML(език за управление на данни). DML е подмножество от езика, използван за заявки към бази данни, добавяне, актуализиране и изтриване на данни.

  • SELECT е една от най-често използваните DML команди и позволява на потребителя да посочи заявка като описание на набора на желания резултат. Заявката не уточнява как трябва да бъдат разположени резултатите - превеждането на заявката във форма, която може да бъде изпълнена в базата данни, е работа на системата на базата данни, по-точно на оптимизатора на заявки.
  • INSERT се използва за добавяне на редове (официален набор) към съществуваща таблица.
  • UPDATE се използва за промяна на стойностите на данните в съществуващ ред в таблица.
  • DELETE дефиниция на съществуващи редове, които да бъдат изтрити от таблицата.

Може да се каже, че три други ключови думи попадат в групата DML:

  • BEGIN WORK (или START TRANSACTION, в зависимост от SQL диалекта) може да се използва за маркиране на началото на транзакция на база данни, която или се изпълнява напълно, или никога не се изпълнява изобщо.
  • COMMIT установява, че всички промени в данните след операциите са запазени.
  • ROLLBACK указва, че всички промени в данните след последното записване или връщане трябва да бъдат унищожени, до точката, която е била записана в базата данни като "отмяна".

COMMIT и ROLLBACK се използват в области като контрол на транзакциите и заключване. И двете инструкции прекратяват всички текущи транзакции (набори от операции в базата данни) и освобождават всички заключвания при промяна на данни в таблици. Наличието или отсъствието на BEGIN WORK или подобен израз зависи от конкретната реализация на SQL.

Втората група ключови думи принадлежи към групата Език за дефиниране на данни или DDL (език за дефиниране на данни). DDLпозволява на потребителя да дефинира нови таблици и свързани елементи. Повечето търговски SQL бази данни имат свои собствени DDL разширения, които позволяват контрол върху нестандартни, но обикновено жизненоважни елементи на конкретна система.
Основните точки на DDL са командите за създаване и изтриване.

  • CREATE дефинира обектите (като таблици), които да бъдат създадени в базата данни.
  • DROP определя кои съществуващи обекти в базата данни ще бъдат премахнати, обикновено за постоянно.
  • Някои системи за бази данни също поддържат командата ALTER, която позволява на потребителя да модифицира съществуващ обект по различни начини – например добавяне на колони към съществуваща таблица.

Третата група SQL ключови думи е Език за управление на данни или DCL (език за управление на данни). DCLотговаря за правата за достъп до данни и позволява на потребителя да контролира кой има достъп да преглежда или манипулира данните в базата данни. Тук има две основни ключови думи:

  • GRANT - Позволява на потребителя да извършва операции
  • REVOKE - премахва или ограничава възможността на потребителя да извършва операции.

Системи за бази данни, използващи SQL

  • InterBase
  • MySQL
  • Оракул
  • PostgreSQL
  • SQL Server

Как да станете професионалист в разработването на уебсайтове и да започнете да печелите пари? Евтини видео курсове с въвеждащо въведение.