Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Принцип на декларативност:
- SQL е декларативен език - указвате КАКВО искате да получите, а не КАК точно да се изпълни
- Системата за управление на базата данни сама определя най-ефективния начин за изпълнение
- 1.Работа с таблици (релации):
- Данните се съхраняват в таблици със редове и колони
- Всяка таблица има уникално име и дефинирана структура
- Колоните имат определен тип данни (текст, число, дата и т.н.)
- 2.Основни операции (CRUD):
- SELECT - извличане на данни
- INSERT - добавяне на нови записи
- UPDATE - промяна на съществуващи данни
- DELETE - изтриване на записи
- 3.Връзки между таблиците:
- Създават се чрез външни ключове (FOREIGN KEYS)
- Поддържат референциална цялост на данните
- Позволяват обединяване на таблици чрез JOIN операции
- 4.Цялостност на данните:
- Първични ключове (PRIMARY KEYS) за уникална идентификация
- Ограничения (constraints) за валидност на данните
- Транзакции за атомарност на операциите
- ===================================================================================
- Транзакцията представлява логическа единица работа, която включва една или повече операции с базата данни. Тя се характеризира със свойствата ACID:
- 1.Атомарност (Atomicity)
- Транзакцията е неделима - или всички операции се изпълняват успешно, или нито една
- Ако възникне грешка, всички промени се отменят (ROLLBACK)
- Пример: Банков превод - или сумата се изтегля от една сметка и постъпва в друга, или операцията изобщо не се извършва
- 2.Консистентност (Consistency)
- Базата данни преминава от едно валидно състояние в друго
- Всички ограничения (constraints) се спазват
- Референциалната цялост се запазва
- 3.Изолация (Isolation)
- Транзакциите са изолирани една от друга
- Промените от една незавършена транзакция не са видими за другите транзакции
- Различни нива на изолация определят как транзакциите си взаимодействат
- 4.Дълготрайност (Durability)
- След успешно приключване, промените са постоянни
- Дори при срив на системата, данните се запазват
- ===================================================================================
- BEGIN TRANSACTION;
- -- Изтегляне на пари от първата сметка
- UPDATE сметки
- SET баланс = баланс - 1000
- WHERE сметка_id = 1;
- -- Внасяне на пари във втората сметка
- UPDATE сметки
- SET баланс = баланс + 1000
- WHERE сметка_id = 2;
- -- Ако всичко е наред, потвърждаваме промените
- COMMIT;
- -- Ако има проблем
- -- ROLLBACK;
- ===================================================================================
- Основни команди за работа с транзакции:
- 1.BEGIN TRANSACTION - започва нова транзакция
- 2.COMMIT - потвърждава промените
- 3.ROLLBACK - отменя всички промени
- 4.SAVEPOINT - създава точка, до която може да се върнем
- 5.ROLLBACK TO SAVEPOINT - връща до определена точка
- Нива на изолация:
- 1.READ UNCOMMITTED
- Най-ниско ниво
- Вижда се "мръсно" четене на незавършени транзакции
- Рядко се използва
- 2.READ COMMITTED
- Вижда само потвърдени промени
- Стандартно ниво в много системи
- Предотвратява "мръсно" четене
- 3.REPEATABLE READ
- Гарантира, че повторното четене връща същите данни
- Предотвратява нежелани промени по време на транзакция
- 4.SERIALIZABLE
- Най-високо ниво на изолация
- Транзакциите се изпълняват сякаш са последователни
- Най-безопасно, но с най-ниска производителност
- Примери за използване на транзакции:
- Финансови операции
- Обработка на поръчки
- Актуализация на свързани таблици
- Прехвърляне на данни между системи
- Сложни бизнес процеси
- Важни практики:
- Транзакциите трябва да са възможно най-кратки
- Избягвайте дълги транзакции, които блокират ресурси
- Внимавайте с нивата на изолация
- Винаги предвиждайте обработка на грешки
- Тествайте поведението при конкурентен достъп
- ===================================================================================
- -- Таблица "служители"
- CREATE TABLE служители (
- id INT PRIMARY KEY,
- име VARCHAR(50),
- отдел_id INT
- );
- -- Таблица "отдели"
- CREATE TABLE отдели (
- id INT PRIMARY KEY,
- име_отдел VARCHAR(50)
- );
- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- 1.INNER JOIN (Вътрешно свързване)
- SELECT с.име, о.име_отдел
- FROM служители с
- INNER JOIN отдели о ON с.отдел_id = о.id;
- Връща само редовете, където има съвпадение в двете таблици
- Ако служител няма отдел или отдел няма служители, тези редове не се показват
- Най-често използваният тип JOIN
- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- 2.LEFT JOIN (Ляво външно свързване)
- SELECT с.име, о.име_отдел
- FROM служители с
- LEFT JOIN отдели о ON с.отдел_id = о.id;
- Връща ВСИЧКИ редове от лявата таблица (служители)
- Ако няма съвпадение в дясната таблица, полетата се попълват с NULL
- Полезно когато искате да видите всички служители, дори тези без отдел
- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- 3.RIGHT JOIN (Дясно външно свързване)
- SELECT с.име, о.име_отдел
- FROM служители с
- RIGHT JOIN отдели о ON с.отдел_id = о.id;
- Връща ВСИЧКИ редове от дясната таблица (отдели)
- Ако няма съвпадение в лявата таблица, полетата се попълват с NULL
- Полезно когато искате да видите всички отдели, дори празните
- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- 4.FULL JOIN (Пълно външно свързване)
- SELECT с.име, о.име_отдел
- FROM служители с
- FULL JOIN отдели о ON с.отдел_id = о.id;
- Връща ВСИЧКИ редове от ДВЕТЕ таблици
- Ако няма съвпадение в която и да е таблица, липсващите полета са NULL
- Показва пълната картина на данните
- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- 5.CROSS JOIN (Кръстосано свързване)
- SELECT с.име, о.име_отдел
- FROM служители с
- CROSS JOIN отдели о;
- Създава Декартово произведение - всеки ред от първата таблица със всеки ред от втората
- Не изисква условие за свързване
- Рядко се използва на практика поради големия брой резултати
- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- 6.SELF JOIN (Самосвързване)
- SELECT с1.име AS служител, с2.име AS мениджър
- FROM служители с1
- LEFT JOIN служители с2 ON с1.мениджър_id = с2.id;
- Свързване на таблица със самата себе си
- Полезно при йерархични връзки (например служител-мениджър)
- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement