Статия Въведение в SQL

Ще посветим цялата тази статия на различни действия с малка база данни. За да разбере значението на използваните обекти на база данни, както и типовете данни, препращам читателя към първата статия от поредицата. Ще приемем също, че читателят на тази статия знае как да анализира схеми на данни и има разбиране за нормализирането на отношенията в процеса на проектиране (например, вижте статиите на Алф в същия раздел статии).

Обект на нашите манипулации ще бъде базата данни на опростената библиотека. Логическият модел в нотацията на Баркър е показан на фигура 1.

статия

Фигура 1 - Логически статичен модел на домейн

Символи: звездичка - задължителен атрибут, кръг - незадължителен атрибут, плътна връзка - задължителна връзка, пунктирана връзка - незадължителна връзка.

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

поле

Фигура 2 - Физически модел на базата данни

Легенда: PK - първичен ключ; FK - външен ключ; I - индекс; U - уникална стойност; задължителните полета са подчертани с удебелен шрифт (не могат да бъдат празни - съдържат NULL); при връзки: тире означава, че трябва да присъства запис, участващ във връзката; кръг - незадължително присъствие (допустимо е отсъствието на свързани записи).

Фигура 2 показва редица концепции, които все още не сме анализирали. Ще направим това по-долу, в хода на изучаване на конструкциите на езика.

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

Първата ни задача ще бъде да създадем действителната база данни. Спомнете си (вижте първата статия от поредицата), че базата данни е контейнер, който съхранява всички обекти, свързани с нея: таблици, процедури, изгледи, релации и т.н. Базата данни е пространство от имена, което разделя своите данни от данните на друга база данни. В допълнение, съдържанието на базата данни трябва да бъде последователно и вътрешно последователно. Нека да дадем на нашата база данни уникално (надяваме се) име във вашата DBMS TrainingDB_1_SimpleLibrary. Тогава SQL операторът за създаване на база данни в най-простия случай изглежда така:

СУБД ще създаде базата данни, използвайки всички опции по подразбиране, създавайки файловете на базата данни в папката по подразбиране, зададена за СУБД. Тъй като различните СУБД имат различна организация на съхранение на бази данни на дискове, различни параметри на самите бази данни, операторът CREATE DATABASE може да има различни допълнения, специфични за конкретна СУБД. Горната кратка версия е най-често срещаната за всички. Пример за създаване на база данни за SQL Server, съхранена в посочения файл (в SQL Server те имат разширение MDF), ще бъде инструкцията:

Допълнителните опции в оператора за създаване на база данни следват скоби, разделени със запетая, след ключовата дума ON. В този пример NAME е логическото име на файла (за нуждите на SQL Server), а FILENAME е физическото пълно име на файла на базата данни, където се съхраняват всички обекти на базата данни. В допълнение към файла с данни, автоматично се създава лог файл, където се съхранява регистър на всички операции, извършени в базата данни. Тук обаче няма да разглеждаме спецификата на SQL Server за съхранение на бази данни, за да не се отклоняваме от темата.

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

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

  • Езиковите конструкции са позиционно свободни, т.е. няма изисквания за "едноредови инструкции" или подобни на Fortran ограничения за дължината на частите от инструкциите. Можете да напишете инструкция на един ред или да поставите отделни части от същата инструкция на няколко реда. Можете да напишете няколко инструкции в един ред (по-късно ще говорим за характеристиките на изпълнението на няколко инструкции подред). Всеки SQL оператор започва с определена дума, така че между тях няма специални разделители (например точка и запетая) (в Access обаче има точка и запетая).
  • Езиковите конструкции не са чувствителни към главни и малки букви, т.е. те могат да бъдат написани както с главни, така и с малки букви, без да губят значението си. Например CREATE DATABASE е еквивалентно на create database и Create Database. В примерите ще маркираме ключовите думи в синьо, както правят инструментите на SQL Server. Имената на обектите, с които се изпълнява инструкцията, няма да бъдат маркирани. Имената на обектите също са нечувствителни към главни и малки букви. Например името на нашата база данни TrainingDB_1_SimpleLibrary е еквивалентно на trainingdb_1_simplelibrary.
  • Имената на обекти могат да съдържат интервали. Някои реализации на SQL позволяват имена, които включват знаци от национални азбуки. И в първия, и във втория случай (и още по-добре винаги) имената трябва да бъдат оградени в двойни кавички. В SQL Server квадратните скоби могат да се използват за същата цел. Например името на базата данни е "TrainingDB_1_SimpleLibrary" или [TrainingDB_1_SimpleLibrary]. За да развиете добри навици в имената (засега) е по-добре да използвате латиницаписма.
  • Низовите константи се записват в единични кавички (апострофи). В примерите ще ги подчертаем в червено, както правят инструментите на SQL Server. Например „Здравей свят!“ - линия.
  • Числените константи се третират като десетични. Реалните числа използват точка като разделител между цели и дробни части. Например 12, 3.14159, .5. За реални числа е разрешена експоненциална нотация, например 3,894e+9, 5E-3. Числовите константи могат да бъдат записани в шестнадесетичен запис в C-образна нотация, например 0x7F, където 0x е отличителната черта на шестнадесетичния запис на числото (x трябва да е малка буква).
Операции: аритметика, манипулиране на низове, преобразуване на типове и др. ние ще въведем при необходимост в хода на по-нататъшното представяне.

Да се ​​върнем към нашата база данни. След създаването, той вече съдържа много обслужващи обекти: няколко дузини таблици, изгледи, съхранени процедури и т.н., използвани от сървъра за управление на базата данни. Сега трябва да добавим нашите таблици към него. Да започнем с най-простото - "Жанрове".

Преди да направите нещо с база данни, трябва да я направите актуална. С SQL инструментите това се прави с много проста команда:

Сега имаме нашата създадена база данни като текуща.

Структурата на всяка таблица се определя от колоните, от които се състои. Тези колони се наричат ​​полета. Всяко поле може да съхранява само набор от данни, определени от неговия тип. Например числово поле съхранява само числа, текстово поле съхранява само текст. Попълнете редовата таблица. Всеки ред се състои от елементи, съответстващи на полетата на таблицата -стойности на полето. Създаването на таблица "Жанрове" със задължителните полета става чрез следната команда:

Това е най-простият формат за създаване на таблица. В скоби, разделени със запетаиописанията на полетата са изброени: първо името на полето, след това неговия тип (вижте първата статия от поредицата). Имайте предвид, че създаването на всичко в SQL започва с ключовата дума CREATE.

Създадената от нас таблица има редица недостатъци. По-специално, за да зададем връзки между таблици (които ще опишем по-късно), ще трябва да посочим кое от полетата сме решили да обозначим като първичен ключ.Първичен ключе поле (или набор от полета), чиито стойности могат еднозначно да идентифицират ред от таблица. Това означава, че стойностите на полетата трябва да бъдат уникални, т.е. в никакви два реда от таблицата не трябва да намерим същите стойности за полето за първичен ключ. Най-често във всяка таблица (в по-голямата част от които има цяло число) се въвежда специално поле, което по-късно се използва като първичен ключ. Такова поле се попълва автоматично със стойност за всеки запис в момента на неговото създаване. Във всяка таблица много СУБД дефинират брояч, който автоматично се увеличава с 1, когато се добави нов запис, и стойността на този брояч се записва като стойност на полето за първичен ключ. Тези. за първия създаден запис полето за първичен ключ ще съдържа числото 1, за второто - 2 и т.н. Очевидно такъв алгоритъм на работа гарантира уникалността на стойността на полето за първичен ключ.

В допълнение към първичния ключ, трябва да отразим в нашата таблица факта, че полетата са задължителни. Поленезадължителноза попълване може да не съдържа нищо (да бъде в състояние NULL). ПолетоЗадължителноза попълване не може да бъде празно, т.е. не можете да добавите запис към таблицата, който няма задължителна стойност на полето. В таблицата "Жанрове" всички полета са задължителни.

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

Приложена инструкция: първо, променя таблицата, второ, променя свойствата на полето на таблицата. Ключовата дума в SQL, която показва промяна в някаква структура, е думата ALTER. В този случай той се прилага към полето на таблицата и в резултат на това към таблицата като цяло. ALTER COLUMN променя описанието на поле: можете да промените типа, да присвоите нови свойства или да премахнете стари свойства на поле. В горното изявление задаваме полето „Име“ (GanreName) на свойството NOT NULL, което прави задължително попълването на стойностите на това поле. Задаването на обратното свойство на NULL или пропускането на тези свойства в описанието на полето (по подразбиране) прави полето незадължително.

Не сме променили обаче първото поле на таблицата Жанрове. Това се дължи на ограниченията, поставени върху израза ALTER COLUMN. Например, сега сме добавили към полето "Име" (GanreName) свойството, че не може да бъде празно. Тази операция беше успешна, защото нямаме никакви записи в таблицата. Ако имаше записи и определен брой записи биха съдържали NULL в това поле, SQL Server ще откаже да изпълни тази инструкция и Access ще изпълни, присвоявайки празни редове като стойности на празни записи. SQL Server не може да направи поле на таблица първичен ключ в оператора ALTER COLUMN - забраната е въведена, защото това поле няма атрибут за уникалност, т.е. не е гарантирано, че първичният ключ ще бъде такъв според дефиницията си - базата данни без такава забрана не може да поддържа своята цялост и консистенция.

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

Изтриването на полето GanreID на таблицата "Жанрове" изпълнява инструкцията: