MySQL — це дуже популярна система керування реляційними базами даних (RDBMS) із відкритим кодом.
Що таке MySQL?
MySQL — це реляційна система керування базами даних
MySQL є відкритим кодом
MySQL є безкоштовним
MySQL ідеально підходить як для малих, так і для великих програм
MySQL дуже швидкий, надійний, масштабований і простий у використанні
MySQL є кросплатформною
MySQL сумісний зі стандартом ANSI SQL
MySQL була вперше випущена в 1995 році
MySQL розробляється, розповсюджується та підтримується корпорацією Oracle
MySQL названо на честь доньки співзасновника Монті Віденіуса: My
Хто використовує MySQL?
Величезні веб-сайти, такі як Facebook, Twitter, Airbnb, Booking.com, Uber, GitHub, YouTube тощо.
Системи керування вмістом, такі як WordPress, Drupal, Joomla!, Contao тощо.
Дуже велика кількість веб-розробників по всьому світу
Показуйте дані на своєму веб-сайті
Щоб створити веб-сайт, який відображає дані з бази даних, вам знадобиться:
Програма бази даних RDBMS (наприклад, MySQL)
Серверна мова сценаріїв, наприклад PHP
Щоб отримати потрібні дані за допомогою SQL
Щоб використовувати HTML / CSS для стилізації сторінки
Що таке RDBMS?
RDBMS означає Relational Database Management System.
RDBMS — це програма, яка використовується для підтримки реляційної бази даних.
RDBMS є основою для всіх сучасних систем баз даних, таких як MySQL, Microsoft SQL Server, Oracle і Microsoft Access.
RDBMS використовує запити SQL для доступу до даних у базі даних.
Що таке таблиця бази даних?
Таблиця – це сукупність пов’язаних записів даних, яка складається зі стовпців і рядків.
Стовпець містить конкретну інформацію про кожен запис у таблиці.
Запис (або рядок) — це кожен окремий запис, який існує в таблиці.
Подивіться на вибір із таблиці «Клієнти» Northwind:
Стовпці в таблиці «Клієнти» вище: CustomerID, CustomerName, ContactName, Address, City, PostalCode та Country. Таблиця має 5 записів (рядків).
Що таке реляційна база даних?
Реляційна база даних визначає зв’язки бази даних у формі таблиць. Таблиці пов’язані одна з одною – на основі спільних для кожної даних даних.
Перегляньте наступні три таблиці «Клієнти», «Замовлення» та «Відправники» з бази даних Northwind:
Таблиця клієнтів
Зв’язок між таблицею «Клієнти» та таблицею «Замовлення» є стовпцем CustomerID:
Таблиця замовлень
Зв’язок між таблицею «Замовлення» та таблицею «Відправники» є стовпцем ShipperID:
Таблиця відправників
SQL є стандартною мовою для роботи з реляційними базами даних.
SQL використовується для вставки, пошуку, оновлення та видалення записів бази даних.
Як використовувати SQL
Наступний оператор SQL вибирає всі записи в таблиці "Клієнти":
SELECT * FROM Customers;
Майте на увазі, що...
Ключові слова SQL НЕ чутливі до регістру: select те саме, що SELECT
У цьому посібнику ми будемо писати всі ключові слова SQL у верхньому регістрі.
Крапка з комою після операторів SQL?
Деякі системи баз даних вимагають крапки з комою в кінці кожного оператора SQL.
Крапка з комою — це стандартний спосіб відокремлення кожного оператора SQL у системах баз даних, які дозволяють виконувати кілька операторів SQL під час одного виклику до сервера.
У цьому посібнику ми використовуватимемо крапку з комою в кінці кожного оператора SQL.
Деякі з найважливіших команд SQL
SELECT - витягує дані з бази даних
UPDATE - оновлює дані в базі даних
DELETE - видаляє дані з бази даних
INSERT INTO - вставляє нові дані в базу даних
CREATE DATABASE - створює нову базу даних
ALTER DATABASE - змінює базу даних
CREATE TABLE - створює нову таблицю
ALTER TABLE - змінює таблицю
DROP TABLE - видаляє таблицю
CREATE INDEX - створює індекс (ключ пошуку)
DROP INDEX - видаляє індекс
Інструкція CREATE DATABASE використовується для створення нової бази даних SQL.
Синтаксис:
CREATE DATABASE databasename;
Приклад СТВОРЕННЯ БАЗИ ДАНИХ
Наступний оператор SQL створює базу даних під назвою "testDB":
CREATE DATABASE testDB;
Порада: переконайтеся, що у вас є права адміністратора, перш ніж створювати будь-яку базу даних. Після створення бази даних ви можете перевірити її у списку баз даних за допомогою такої команди SQL: SHOW DATABASES;
Інструкція DROP DATABASE використовується для видалення існуючої бази даних SQL.
Синтаксис:
DROP DATABASE databasename;
Примітка. Будьте обережні, перш ніж видаляти базу даних. Видалення бази даних призведе до втрати повної інформації, що зберігається в базі даних!
Приклад DROP DATABASE
Наступний оператор SQL видаляє існуючу базу даних "testDB":
DROP DATABASE testDB;
Порада: переконайтеся, що у вас є права адміністратора, перш ніж видаляти будь-яку базу даних. Після видалення бази даних ви можете перевірити її у списку баз даних за допомогою наступної команди SQL: SHOW DATABASES;
Оператор CREATE TABLE використовується для створення нової таблиці в базі даних.
Синтаксис:
CREATE TABLE table_name (
column1 datatype,
column2 datatype,
column3 datatype,
....
);
Параметри стовпців задають імена стовпців таблиці.
Параметр datatype визначає тип даних, які може містити стовпець (наприклад, varchar, integer, date тощо).
Приклад MySQL CREATE TABLE
У наведеному нижче прикладі створюється таблиця під назвою «Особи», яка містить п’ять стовпців: ідентифікатор особи, прізвище, ім’я, адреса та місто:
CREATE TABLE Persons (
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);
Стовпець PersonID має тип int і містить ціле число.
Стовпці Прізвище, Ім’я, Адреса та Місто мають тип varchar і містять символи, а максимальна довжина цих полів становить 255 символів.
Інструкція DROP TABLE використовується для видалення існуючої таблиці в базі даних.
Примітка: Видалення таблиці призведе до втрати повної інформації, що зберігається в таблиці!
Приклад MySQL DROP TABLE
Наступна інструкція SQL видаляє наявну таблицю "Persons ":
DROP TABLE Persons ;
Оператор TRUNCATE TABLE використовується для видалення даних усередині таблиці, але не самої таблиці.
Синтаксис:
TRUNCATE TABLE Persons ;
Оператор INSERT INTO використовується для вставки нових записів у таблицю.
INSERT INTO Синтаксис
Інструкцію INSERT INTO можна написати двома способами:
1. Вкажіть назви стовпців і значення, які потрібно вставити:
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
2. Якщо ви додаєте значення для всіх стовпців таблиці, вам не потрібно вказувати назви стовпців у SQL-запиті. Однак переконайтеся, що порядок значень відповідає порядку стовпців у таблиці. Тут синтаксис INSERT INTO буде таким:
INSERT INTO table_name
VALUES (value1, value2, value3, ...);
INSERT INTO Приклад
Наступний оператор SQL вставляє новий запис у таблицю "Клієнти":
INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)
VALUES ('Cardinal', 'Tom B. Erichsen', 'Skagen 21', 'Stavanger', '4006', 'Norway');
Інструкція MySQL SELECT
Оператор SELECT використовується для вибору даних із бази даних.
Повернуті дані зберігаються в таблиці результатів, яка називається набором результатів.
SELECT column1, column2, ...
FROM table_name;
Тут стовпець1, стовпець2, ... — це назви полів таблиці, з якої потрібно вибрати дані. Якщо ви хочете вибрати всі поля, доступні в таблиці, використовуйте такий синтаксис:
SELECT * FROM table_name;
Приклад стовпців SELECT
Наступний оператор SQL вибирає стовпці "CustomerName", "City" та "Country" у таблиці "Customers":
SELECT CustomerName, City, Country FROM Customers;
SELECT * Приклад
Наступний оператор SQL вибирає ВСІ стовпці з таблиці «Клієнти»:
SELECT * FROM Customers;
Інструкція MySQL SELECT DISTINCT
Оператор SELECT DISTINCT використовується для повернення лише різних (різних) значень.
Усередині таблиці стовпець часто містить багато повторюваних значень; іноді вам потрібно лише перелічити різні (різні) значення.
Синтаксис SELECT DISTINCT
SELECT DISTINCT column1, column2, ...
FROM table_name;
SELECT Приклад без DISTINCT
Наступний оператор SQL вибирає всі (включно з дублікатами) значення зі стовпця "Країна" в таблиці "Клієнти":
SELECT Country FROM Customers;
Тепер скористаємося оператором SELECT DISTINCT і побачимо результат.
ВИБЕРІТЬ РІЗНІ приклади
У наведеному нижче операторі SQL вибираються лише РІЗНІ значення зі стовпця «Країна» в таблиці «Клієнти»:
SELECT DISTINCT Country FROM Customers;
Наступний оператор SQL підраховує та повертає кількість різних (окремих) країн у таблиці «Клієнти»:
SELECT COUNT(DISTINCT Country) FROM Customers;
Речення WHERE використовується для фільтрації записів.
Він використовується для вилучення лише тих записів, які відповідають певній умові.
Синтаксис WHERE
SELECT column1, column2, ...
FROM table_name
WHERE condition;
Примітка. Речення WHERE використовується не лише в операторах SELECT, воно також використовується в UPDATE, DELETE тощо!
Приклад пропозиції WHERE
Наступний оператор SQL вибирає всіх клієнтів із "Мексики":
SELECT * FROM Customers
WHERE Country = 'Mexico';
Текстові поля проти числових полів
SQL вимагає одинарних лапок навколо текстових значень (більшість систем баз даних також допускають подвійні лапки).
Однак числові поля не слід брати в лапки:
SELECT * FROM Customers
WHERE CustomerID = 1;
Оператори в реченні WHERE
У реченні WHERE можна використовувати такі оператори:
= Рівно
> Більше ніж
< Менше ніж
>= Більше або дорівнює
<= Менше або дорівнює
<> Не дорівнює. Примітка. У деяких версіях SQL цей оператор може бути записаний як !=
BETWEEN Між певним діапазоном
LIKE Пошук візерунка
IN Для визначення кількох можливих значень для стовпця
Оператор LIKE використовується в реченні WHERE для пошуку заданого шаблону в стовпці.
У поєднанні з оператором LIKE часто використовуються два символи підстановки:
Знак відсотка (%) означає нуль, один або декілька символів
Знак підкреслення (_) означає один символ
Знак відсотка і підкреслення також можна використовувати в комбінаціях!
Синтаксис LIKE
SELECT column1, column2, ...
FROM table_name
WHERE columnN LIKE pattern;
Порада. Ви також можете комбінувати будь-яку кількість умов за допомогою операторів І або АБО.
Ось кілька прикладів різних операторів LIKE із символами узагальнення «%» і «_».
Опис оператора LIKE
WHERE CustomerName LIKE 'a%' Знаходить будь-які значення, що починаються з "a"
WHERE CustomerName LIKE '%a' Знаходить будь-які значення, які закінчуються на "a"
WHERE CustomerName LIKE '%or%' Знаходить будь-які значення, які містять "або" в будь-якій позиції
WHERE CustomerName LIKE '_r%' Знаходить будь-які значення, які мають «r» у другій позиції
WHERE CustomerName LIKE 'a_%' Знаходить будь-які значення, що починаються з "a" і містять принаймні 2 символи
WHERE CustomerName LIKE 'a__%' Знаходить будь-які значення, що починаються з "a" і містять принаймні 3 символи
WHERE ContactName LIKE 'a%o' Знаходить будь-які значення, які починаються на "a" і закінчуються на "o"
Приклади SQL LIKE
Наступний оператор SQL вибирає всіх клієнтів із CustomerName, що починається на "a":
SELECT * FROM Customers
WHERE CustomerName LIKE 'a%';
Наступний оператор SQL вибирає всіх клієнтів, ім’я клієнта яких закінчується на "a":
SELECT * FROM Customers
WHERE CustomerName LIKE '%a';
Наступний оператор SQL вибирає всіх клієнтів із CustomerName, які мають «або» в будь-якій позиції:
SELECT * FROM Customers
WHERE CustomerName LIKE '%or%';
Наступний оператор SQL вибирає всіх клієнтів із CustomerName, які мають «r» у другій позиції:
SELECT * FROM Customers
WHERE CustomerName LIKE '_r%';
Наступна інструкція SQL вибирає всіх клієнтів із CustomerName, яке починається з "a" і містить принаймні 3 символи:
SELECT * FROM Customers
WHERE CustomerName LIKE 'a__%';
Наступний оператор SQL вибирає всіх клієнтів із іменем ContactName, яке починається на "a" і закінчується на "o":
SELECT * FROM Customers
WHERE ContactName LIKE 'a%o';
Речення WHERE можна поєднувати з операторами AND, OR і NOT.
Оператори AND та OR використовуються для фільтрації записів на основі кількох умов:
Оператор AND відображає запис, якщо всі умови, розділені AND, є ІСТИННИМИ.
Оператор OR відображає запис, якщо будь-яка з умов, розділених OR, має значення ІСТИНА.
Оператор NOT відображає запис, якщо умова (умови) НЕ ІСТИНА.
AND Синтаксис
SELECT column1, column2, ...
FROM table_name
WHERE condition1 AND condition2 AND condition3 ...;
АБО Приклад
Наступний оператор SQL вибирає всі поля з "Клієнтів", де місто "Берлін" АБО "Штутгарт":Синтаксис
SELECT column1, column2, ...
FROM table_name
WHERE condition1 OR condition2 OR condition3 ...;
NOT Синтаксис
SELECT column1, column2, ...
FROM table_name
WHERE NOT condition;
AND Приклад
Наступний оператор SQL вибирає всі поля з «Клієнтів», де країна – «Німеччина» І місто – «Берлін»:
SELECT * FROM Customers
WHERE Country = 'Germany' AND City = 'Berlin';
OR Приклад
Наступний оператор SQL вибирає всі поля з "Клієнтів", де місто "Берлін" АБО "Штутгарт":
SELECT * FROM Customers
WHERE City = 'Berlin' OR City = 'Stuttgart';
Наступний оператор SQL вибирає всі поля з "Клієнтів", де країна "Німеччина" АБО "Іспанія":
SELECT * FROM Customers
WHERE Country = 'Germany' OR Country = 'Spain';
NOT Приклад
Наступний оператор SQL вибирає всі поля з «Клієнтів», де країна НЕ «Німеччина»:
SELECT * FROM Customers
WHERE NOT Country = 'Germany';
Поєднання І, АБО та НІ
Ви також можете комбінувати оператори AND, OR та NOT
Наступний оператор SQL вибирає всі поля з «Клієнтів», де країна — «Німеччина» І місто має бути «Берлін» АБО «Штутгарт» (використовуйте дужки для створення складних виразів):
SELECT * FROM Customers
WHERE Country = 'Germany' AND (City = 'Berlin' OR City = 'Stuttgart');
Наступний оператор SQL вибирає всі поля з «Клієнтів», де країна НЕ «Німеччина» і НЕ «США»:
SELECT * FROM Customers
WHERE NOT Country = 'Germany' AND NOT Country = 'USA';
Ключове слово ORDER BY використовується для сортування набору результатів у порядку зростання або спадання.
Ключове слово ORDER BY за умовчанням сортує записи в порядку зростання. Щоб відсортувати записи в порядку спадання, використовуйте ключове слово DESC.
ORDER BY Синтаксис
SELECT column1, column2, ...
FROM table_name
ORDER BY column1, column2, ... ASC|DESC;
ORDER BY Приклад
Наступний оператор SQL вибирає всіх клієнтів із таблиці «Клієнти», відсортованих за стовпцем «Країна»:
SELECT * FROM Customers
ORDER BY Country;
ORDER BY DESC Приклад
Наведений нижче оператор SQL вибирає всіх клієнтів із таблиці «Клієнти», відсортованих ЗА СПАДАННЯМ за стовпцем «Країна»:
SELECT * FROM Customers
ORDER BY Country DESC;
ORDER BY ЗА кількома стовпцями
Наступний оператор SQL вибирає всіх клієнтів із таблиці «Клієнти», відсортованих за стовпцями «Країна» та «Назва клієнта». Це означає, що він упорядковує їх за країною, але якщо деякі рядки мають однакову країну, вони впорядковуються за назвою клієнта:
SELECT * FROM Customers
ORDER BY Country, CustomerName;
ORDER BY ЗА кількома стовпцями. Приклад 2
Наступний оператор SQL вибирає всіх клієнтів із таблиці «Клієнти», відсортованих за зростанням за стовпцем «Країна» та за спаданням за стовпцем «Назва клієнта»:
SELECT * FROM Customers
ORDER BY Country ASC, CustomerName DESC;
Інструкція GROUP BY групує рядки з однаковими значеннями в підсумкові рядки, як-от «знайти кількість клієнтів у кожній країні».
Оператор GROUP BY часто використовується з агрегатними функціями (COUNT(), MAX(), MIN(), SUM(), AVG()), щоб групувати набір результатів за одним або кількома стовпцями.
GROUP BY Синтаксис
SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
ORDER BY column_name(s);
Функція MIN() повертає найменше значення вибраного стовпця.
Функція MAX() повертає найбільше значення вибраного стовпця.
Синтаксис MIN().
SELECT MIN(column_name)
FROM table_name
WHERE condition;
Синтаксис MAX().
SELECT MAX(column_name)
FROM table_name
WHERE condition;
Приклад MIN().
Наступний оператор SQL знаходить ціну найдешевшого продукту:
SELECT MIN(Price) AS SmallestPrice
FROM Products;
Приклад MAX().
Наступний оператор SQL знаходить ціну найдорожчого продукту:
SELECT MAX(Price) AS LargestPrice
FROM Products;
Функція COUNT() повертає кількість рядків, які відповідають заданому критерію.
Синтаксис COUNT().
SELECT COUNT(column_name)
FROM table_name
WHERE condition;
Функція AVG() повертає середнє значення числового стовпця.
Синтаксис AVG().
SELECT AVG(column_name)
FROM table_name
WHERE condition;
Функція SUM() повертає загальну суму числового стовпця.
Синтаксис SUM().
SELECT SUM(column_name)
FROM table_name
WHERE condition;
Приклад COUNT().
Наступний оператор SQL знаходить кількість продуктів:
SELECT COUNT(ProductID)
FROM Products;
Примітка: значення NULL не враховуються.
Приклад AVG().
Наступний оператор SQL знаходить середню ціну всіх продуктів:
SELECT AVG(Price)
FROM Products;
SUM() Приклад
Наступний оператор SQL знаходить суму полів "Кількість" у таблиці "Деталі замовлення":
SELECT SUM(Quantity)
FROM OrderDetails;
Примітка. Значення NULL ігноруються.
Що таке значення NULL?
Поле зі значенням NULL є полем без значення.
Якщо поле в таблиці є необов’язковим, можна вставити новий запис або оновити запис, не додаючи значення до цього поля. Тоді поле буде збережено зі значенням NULL.
Примітка. Значення NULL відрізняється від нульового значення або поля, яке містить пробіли. Поле зі значенням NULL – це поле, яке було залишено порожнім під час створення запису!
Як перевірити значення NULL?
Неможливо перевірити значення NULL за допомогою операторів порівняння, таких як =, < або <>.
Замість цього нам доведеться використовувати оператори IS NULL і IS NOT NULL.
Синтаксис IS NULL
SELECT column_names
FROM table_name
WHERE column_name IS NULL;
IS NOT NULL Синтаксис
SELECT column_names
FROM table_name
WHERE column_name IS NOT NULL;
Оператор IS NULL
Оператор IS NULL використовується для перевірки порожніх значень (значень NULL).
Наступний SQL перераховує всіх клієнтів із значенням NULL у полі "Адреса":
SELECT CustomerName, ContactName, Address
FROM Customers
WHERE Address IS NULL;
Порада: завжди використовуйте IS NULL для пошуку значень NULL.
Оператор IS NOT NULL
Оператор IS NOT NULL використовується для перевірки на непорожні значення (значення NOT NULL).
Наступний SQL перераховує всіх клієнтів із значенням у полі "Адреса":
SELECT CustomerName, ContactName, Address
FROM Customers
WHERE Address IS NOT NULL;
Інструкція UPDATE
Оператор UPDATE використовується для зміни існуючих записів у таблиці.
UPDATE Синтаксис
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
Примітка. Будьте обережні, оновлюючи записи в таблиці! Зверніть увагу на речення WHERE в операторі UPDATE. Речення WHERE визначає, які записи потрібно оновити. Якщо ви опустите речення WHERE, усі записи в таблиці будуть оновлені!
UPDATE таблицю
Наступний оператор SQL оновлює першого клієнта (CustomerID = 1) за допомогою нової контактної особи та нового міста.
UPDATE Customers
SET ContactName = 'Alfred Schmidt', City = 'Frankfurt'
WHERE CustomerID = 1;
UPDATE кількох записів
Саме пропозиція WHERE визначає, скільки записів буде оновлено.
Наступна інструкція SQL оновить PostalCode до 00000 для всіх записів, де країною є "Мексика":
UPDATE Customers
SET PostalCode = 00000
WHERE Country = 'Mexico';
Оператор DELETE використовується для видалення існуючих записів у таблиці.
Синтаксис DELETE
DELETE FROM table_name WHERE condition;
Примітка. Будьте обережні, видаляючи записи в таблиці! Зверніть увагу на речення WHERE в операторі DELETE. Речення WHERE вказує, які записи потрібно видалити. Якщо пропустити речення WHERE, усі записи в таблиці будуть видалені!
Приклад
Наступний оператор SQL видаляє клієнта "Alfreds Futterkiste" із таблиці "Клієнти":
DELETE FROM Customers WHERE CustomerName='Alfreds Futterkiste';
Видалити всі записи
Можна видалити всі рядки в таблиці, не видаляючи таблицю. Це означає, що структура таблиці, атрибути та індекси залишаться недоторканими:
DELETE FROM table_name;
Наступний оператор SQL видаляє всі рядки в таблиці "Клієнти", не видаляючи таблицю:
DELETE FROM Customers;
Речення LIMIT використовується для визначення кількості записів, які потрібно повернути.
Речення LIMIT корисно для великих таблиць із тисячами записів. Повернення великої кількості записів може вплинути на продуктивність.
Синтаксис LIMIT
SELECT column_name(s)
FROM table_name
WHERE condition
LIMIT number;
Приклади LIMIT
Наступний оператор SQL вибирає перші три записи з таблиці «Клієнти»:
SELECT * FROM Customers
LIMIT 3;
Наступний оператор SQL вибирає перші три записи з таблиці «Клієнти», де країною є «Німеччина»:
SELECT * FROM Customers
WHERE Country='Germany'
LIMIT 3;
Символ підстановки використовується для заміни одного або кількох символів у рядку.
Символи підстановки використовуються з оператором LIKE. Оператор LIKE використовується в реченні WHERE для пошуку заданого шаблону в стовпці.
Символи підстановки також можна використовувати в комбінаціях!
Ось кілька прикладів різних операторів LIKE із символами узагальнення «%» і «_».
Оператора LIKE Опис
WHERE CustomerName LIKE 'a%' Знаходить будь-які значення, що починаються з "a"
WHERE CustomerName LIKE '%a' Знаходить будь-які значення, які закінчуються на "a"
WHERE CustomerName LIKE '%or%' Знаходить будь-які значення, які містять "або" в будь-якій позиції
WHERE CustomerName LIKE '_r%' Знаходить будь-які значення, які мають «r» у другій позиції
WHERE CustomerName LIKE 'a_%_%' Знаходить будь-які значення, що починаються з "a" і містять принаймні 3 символи
WHERE ContactName LIKE 'a%o' Знаходить будь-які значення, які починаються на "a" і закінчуються на "o"
Використання символу підстановки %
Наступний оператор SQL вибирає всіх клієнтів, у яких місто починається з "ber":
SELECT * FROM Customers
WHERE City LIKE 'ber%';
Наступний оператор SQL вибирає всіх клієнтів із містом, що містить шаблон «es»:
SELECT * FROM Customers
WHERE City LIKE '%es%';
Використання символу підстановки _
Наступна інструкція SQL вибирає всіх клієнтів, у яких місто починається з будь-якого символу, після якого йде «ondon»:
SELECT * FROM Customers
WHERE City LIKE '_ondon';
Наступна інструкція SQL вибирає всіх клієнтів, у яких місто починається з "L", за яким іде будь-який символ, за яким іде "n", за яким іде будь-який символ, за яким іде "on":
SELECT * FROM Customers
WHERE City LIKE 'L_n_on';
Оператор IN дозволяє вказати кілька значень у реченні WHERE.
Оператор IN є скороченням кількох умов АБО.
Синтаксис IN
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1, value2, ...);
або
SELECT column_name(s)
FROM table_name
WHERE column_name IN (SELECT STATEMENT);
Приклади оператора IN
Наступний оператор SQL вибирає всіх клієнтів, які знаходяться в "Німеччині", "Франції" або "Великобританії":
SELECT * FROM Customers
WHERE Country IN ('Germany', 'France', 'UK');
Наступний оператор SQL вибирає всіх клієнтів, які НЕ знаходяться в "Німеччині", "Франції" чи "Великобританії":
SELECT * FROM Customers
WHERE Country NOT IN ('Germany', 'France', 'UK');
Наступний оператор SQL вибирає всіх клієнтів із тих самих країн, що й постачальники:
SELECT * FROM Customers
WHERE Country IN (SELECT Country FROM Suppliers);
Оператор BETWEEN вибирає значення в заданому діапазоні. Значеннями можуть бути числа, текст або дати.
Оператор BETWEEN включає: початкове та кінцеве значення включено.
МІЖ Синтаксис
SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;
МІЖ Приклад
Наступний оператор SQL вибирає всі продукти з ціною від 10 до 20:
SELECT * FROM Products
WHERE Price BETWEEN 10 AND 20;
NOT BETWEEN Приклад
Щоб відобразити продукти поза діапазоном попереднього прикладу, використовуйте NOT BETWEEN:
SELECT * FROM Products
WHERE Price NOT BETWEEN 10 AND 20;
BETWEEN з IN Приклад
Наступний оператор SQL вибирає всі продукти з ціною від 10 до 20. Крім того; не показувати продукти з CategoryID 1, 2 або 3:
SELECT * FROM Products
WHERE Price BETWEEN 10 AND 20
AND CategoryID NOT IN (1,2,3);
Приклад текстових значень BETWEEN
Наступний оператор SQL вибирає всі продукти з ProductName між "Carnarvon Tigers" і "Mozzarella di Giovanni":
SELECT * FROM Products
WHERE ProductName BETWEEN 'Carnarvon Tigers' AND 'Mozzarella di Giovanni'
ORDER BY ProductName;
Наступний оператор SQL вибирає всі продукти з ProductName між «Carnarvon Tigers» і «Chef Anton's Cajun Seasoning»:
SELECT * FROM Products
WHERE ProductName BETWEEN "Carnarvon Tigers" AND "Chef Anton's Cajun Seasoning"
ORDER BY ProductName;
Приклад текстових значень NOT BETWEEN
Наступний оператор SQL вибирає всі продукти з ProductName не між "Carnarvon Tigers" і "Mozzarella di Giovanni":
SELECT * FROM Products
WHERE ProductName NOT BETWEEN 'Carnarvon Tigers' AND 'Mozzarella di Giovanni'
ORDER BY ProductName;
Приклад BETWEEN датами
Наступний оператор SQL вибирає всі замовлення з OrderDate між «01-July-1996» і «31-July-1996»:
SELECT * FROM Orders
WHERE OrderDate BETWEEN '1996-07-01' AND '1996-07-31';
Псевдоніми використовуються для надання таблиці або стовпцю в таблиці тимчасового імені.
Псевдоніми часто використовуються, щоб зробити назви стовпців більш читабельними.
Псевдонім існує лише протягом цього запиту.
Псевдонім створюється за допомогою ключового слова AS.
Синтаксис стовпця псевдонімів
SELECT column_name AS alias_name
FROM table_name;
Синтаксис таблиці псевдонімів
SELECT column_name(s)
FROM table_name AS alias_name;
Псевдонім для прикладів стовпців
Наступний оператор SQL створює два псевдоніми, один для стовпця CustomerID і інший для стовпця CustomerName:
SELECT CustomerID AS ID, CustomerName AS Customer
FROM Customers;
Наступний оператор SQL створює два псевдоніми: один для стовпця CustomerName і один для стовпця ContactName. Примітка. Одинарні або подвійні лапки потрібні, якщо псевдонім містить пробіли:
SELECT CustomerName AS Customer, ContactName AS "Contact Person"
FROM Customers;
Наступний оператор SQL створює псевдонім із назвою «Адреса», який об’єднує чотири стовпці (адреса, поштовий індекс, місто та країна):
SELECT CustomerName, CONCAT_WS(', ', Address, PostalCode, City, Country) AS Address
FROM Customers;
Приклад псевдоніма для таблиць
Наступний оператор SQL вибирає всі замовлення від клієнта з CustomerID=4 (Around the Horn). Ми використовуємо таблиці «Клієнти» та «Замовлення» та надаємо їм псевдоніми таблиць «c» та «o» відповідно (тут ми використовуємо псевдоніми, щоб зробити SQL коротшим):
SELECT o.OrderID, o.OrderDate, c.CustomerName
FROM Customers AS c, Orders AS o
WHERE c.CustomerName='Around the Horn' AND c.CustomerID=o.CustomerID;
Наступний оператор SQL такий самий, як і вище, але без псевдонімів:
SELECT Orders.OrderID, Orders.OrderDate, Customers.CustomerName
FROM Customers, Orders
WHERE Customers.CustomerName='Around the Horn' AND Customers.CustomerID=Orders.CustomerID;
Псевдоніми можуть бути корисними, коли:
У запиті бере участь більше однієї таблиці
У запиті використовуються функції
Назви стовпців великі або погано читаються
Два або більше стовпців об'єднують разом
Data Definition Language (DDL) (мова опису даних) – це словник, який використовується для визначення чи описи структури бази даних.
У DDL входять такі оператори як: CREATE (створити), ALTER (змінити), DROP (видалити).
Оператор CREATE використовується визначення нових сутностей.
Оператор ALTER використовується зміни певних існуючих сутностей.
Оператор DROP використовується для видалення існуючих сутностей.
Цілісність бази даних – властивість бази даних, що забезпечує коректність та несуперечність даних, що зберігаються в будь-який момент часу.
Цілісність БД не гарантує достовірності інформації, що міститься в ній, але забезпечує принаймні правдоподібність цієї інформації, відкидаючи свідомо неймовірні, неможливі значення.
Цілісність бази даних забезпечується обмеженнями на введені користувачами дані.
Data Manipulation Language (DML) – це сімейство комп'ютерних мов, використовуваних користувачами баз даних для отримання, вставки, видалення або зміни даних у базах даних.
Функції DML:
INSERT – вставка даних
SELECT – вибірка даних
UPDATE – зміна даних
DELETE – видалення даних
Типи цілісності бази даних:
1) Доменна цілісність
2) Цілісність сутностей
3) Посилальна цілісність
Цілісність сутностей гарантує унікальність записів у таблицях (сутності).
Обмеження, що забезпечують цілісність сутностей:
1) Використання обмежень первинного ключа (Primary Key)
2) Використання обмежень на унікальність (UNIQUE)
Primary Key (Первинний ключ) – надає посилання для зв'язку з іншими таблицями, а також визначає обмеження унікальності для стовпця, на якому задається.
Foreign Key (Зовнішній ключ) – задає стовпець, який посилається на обмеження Primary Key або UNIQUE. Обмеження Foreign Key забороняє вводити дані не існуючі в стовпцях (стовпцях з обмеженням Primary Key або (UNIQUE).
Дочірня та батьківська таблиці
Таблиця, що містить FK, називається дочірньою таблицею по відношенню до таблиці (батьківській таблиці), що містить первинний ключ.
Батьківська таблиця – таблиця, яку посилаються.
Дочірня таблиця – таблиця, що посилається.
Зв'язок - це деяка асоціація між двома таблицями, реалізована при допомоги пари FK -> PK або FK -> UNIQUE
Типи зв'язків:
Один до одного
Один до багатьох
Багато хто до багатьох
Обмеження PRIMARY KEY однозначно ідентифікує кожен запис у таблиці.
Первинні ключі повинні містити значення UNIQUE і не можуть містити значення NULL.
Таблиця може мати лише ОДИН первинний ключ; а в таблиці цей первинний ключ може складатися з одного або кількох стовпців (полів).
PRIMARY KEY на CREATE TABLE
Наступний SQL створює ПЕРВИННИЙ КЛЮЧ у стовпці "ID" під час створення таблиці "Особи":
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
PRIMARY KEY (ID)
);
Щоб дозволити іменування обмеження PRIMARY KEY і для визначення обмеження PRIMARY KEY для кількох стовпців, використовуйте такий синтаксис SQL:
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
CONSTRAINT PK_Person PRIMARY KEY (ID,LastName)
);
Примітка. У прикладі вище є лише ОДИН ПЕРВИННИЙ КЛЮЧ (PK_Person). Однак ЗНАЧЕННЯ первинного ключа складається з ДВОХ СТОВПЦІВ (ID + Прізвище).
PRIMARY KEY та ALTER TABLE
Щоб створити обмеження PRIMARY KEY для стовпця "ID", коли таблицю вже створено, використовуйте такий SQL:
ALTER TABLE Persons
ADD PRIMARY KEY (ID);
Щоб дозволити іменування обмеження PRIMARY KEY і для визначення обмеження PRIMARY KEY для кількох стовпців, використовуйте такий синтаксис SQL:
ALTER TABLE Persons
ADD CONSTRAINT PK_Person PRIMARY KEY (ID,LastName);
Примітка. Якщо ви використовуєте ALTER TABLE для додавання первинного ключа, стовпці первинного ключа мають бути оголошені такими, що не містять NULL-значень (коли таблицю було створено вперше).
DROP тa PRIMARY KEY Constraint
Щоб видалити обмеження PRIMARY KEY, використовуйте такий SQL:
ALTER TABLE Persons
DROP PRIMARY KEY;
Обмеження FOREIGN KEY
Обмеження FOREIGN KEY використовується для запобігання діям, які руйнують зв’язки між таблицями.
ЗОВНІШНИЙ КЛЮЧ — це поле (або набір полів) в одній таблиці, яке посилається на ПЕРВИННИЙ КЛЮЧ в іншій таблиці.
Таблиця із зовнішнім ключем називається дочірньою таблицею, а таблиця з первинним ключем називається батьківською таблицею.
Обмеження FOREIGN KEY запобігає вставці недійсних даних у стовпець зовнішнього ключа, оскільки це має бути одне зі значень, що містяться в батьківській таблиці.
ЗОВНІШНИЙ КЛЮЧ на CREATE TABLE
Наступний SQL створює ЗОВНІШНИЙ КЛЮЧ у стовпці "PersonID" під час створення таблиці "Orders":
CREATE TABLE Orders (
OrderID int NOT NULL,
OrderNumber int NOT NULL,
PersonID int,
PRIMARY KEY (OrderID),
FOREIGN KEY (PersonID) REFERENCES Persons(PersonID)
);
Щоб дозволити іменування обмеження FOREIGN KEY і для визначення обмеження FOREIGN KEY для кількох стовпців, використовуйте такий синтаксис SQL:
CREATE TABLE Orders (
OrderID int NOT NULL,
OrderNumber int NOT NULL,
PersonID int,
PRIMARY KEY (OrderID),
CONSTRAINT FK_PersonOrder FOREIGN KEY (PersonID)
REFERENCES Persons(PersonID)
);
ЗОВНІШНИЙ КЛЮЧ та ALTER TABLE
Щоб створити обмеження FOREIGN KEY для стовпця "PersonID", коли таблицю "Orders" уже створено, використовуйте такий SQL:
ALTER TABLE Orders
ADD FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);
Щоб дозволити іменування обмеження FOREIGN KEY і для визначення обмеження FOREIGN KEY для кількох стовпців, використовуйте такий синтаксис SQL:
ALTER TABLE Orders
ADD CONSTRAINT FK_PersonOrder
FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);
Обмеження DROP a FOREIGN KEY
Щоб видалити обмеження FOREIGN KEY, використовуйте такий SQL:
ALTER TABLE Orders
DROP FOREIGN KEY FK_PersonOrder;
Нормалізація таблиць – це формальний апарат обмежень формування таблиць, що дозволяє усунути дублювання даних, забезпечує
несуперечність збережених у базі даних, зменшує трудовитрати ведення бази даних (введення та коригування даних.
Для нормалізації таблиць та БД використовують обмеження:
1) Першої нормальної форми.
2) Друга нормальна форма.
3) Третьої нормальної форми.
Перша нормальна форма (1NF) – відсутність даних, що повторюються, будь-яке поле будь-якого запису зберігає лише одне значення.
Друга нормальна форма (2NF) – вимагає попереднього наведення вихідної таблиці до першої НФ, а також кожен не ключовий стовпець таблиці що знаходиться в 1НФ, повинен залежати від усього ключа.
Третя нормальна форма (3NF) – вимагає попереднього наведення вихідної таблиці до другої НФ, а також до жодного ключового стовпця не може бути залежно від іншого не ключового стовпця. Так само не допускається наявність таблиці похідних даних.
Третя нормальна форма (3NF) – вимагає попереднього наведення вихідної таблиці до другої НФ, а також до жодного ключового стовпця не може бути залежно від іншого не ключового стовпця. Так само не допускається наявність таблиці похідних даних.
Денормалізація – процес зниження нормальної форми. Здійснюється якщо наведена вища форма призводить до погіршення практичного використання.
Підтримувані типи об'єднань у MySQL
INNER JOIN: повертає записи, які мають відповідні значення в обох таблицях
LEFT JOIN: повертає всі записи з лівої таблиці та відповідні записи з правої таблиці
RIGHT JOIN: повертає всі записи з правої таблиці та відповідні записи з лівої таблиці
CROSS JOIN: повертає всі записи з обох таблиць
Ключове слово INNER JOIN вибирає записи, які мають відповідні значення в обох таблицях.
Синтаксис INNER JOIN
SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;
MySQL INNER JOIN Приклад
Наступний оператор SQL вибирає всі замовлення з інформацією про клієнта:
SELECT Orders.OrderID, Customers.CustomerName
FROM Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID;
Примітка. Ключове слово INNER JOIN вибирає всі рядки з обох таблиць, якщо є збіг між стовпцями. Якщо в таблиці «Замовлення» є записи, які не збігаються в «Клієнти», ці замовлення не відображатимуться!
ОБ'ЄДНАЙТЕся до трьох таблиць
Наступний оператор SQL вибирає всі замовлення з інформацією про клієнта та відправника:
SELECT Orders.OrderID, Customers.CustomerName, Shippers.ShipperName
FROM ((Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID)
INNER JOIN Shippers ON Orders.ShipperID = Shippers.ShipperID);
Ключове слово LEFT JOIN повертає всі записи з лівої таблиці (таблиця1) і відповідні записи (якщо є) з правої таблиці (таблиця2).
Синтаксис LEFT JOIN
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name;
Наступний оператор SQL вибере всіх клієнтів і будь-які замовлення, які вони можуть мати:
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID
ORDER BY Customers.CustomerName;
Примітка. Ключове слово LEFT JOIN повертає всі записи з лівої таблиці (Клієнти), навіть якщо в правій таблиці (Замовлення) немає збігів.
Ключове слово RIGHT JOIN повертає всі записи з правої таблиці (таблиця2) і відповідні записи (якщо є) з лівої таблиці (таблиця1).
Синтаксис RIGHT JOIN
SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name;
Наступний оператор SQL поверне всіх співробітників і будь-які замовлення, які вони могли розмістити:
SELECT Orders.OrderID, Employees.LastName, Employees.FirstName
FROM Orders
RIGHT JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID
ORDER BY Orders.OrderID;
Примітка. Ключове слово RIGHT JOIN повертає всі записи з правої таблиці (Співробітники), навіть якщо в лівій таблиці (Замовлення) немає збігів.
Ключове слово CROSS JOIN повертає всі записи з обох таблиць (table1 і table2).
CROSS JOIN Синтаксис
SELECT column_name(s)
FROM table1
CROSS JOIN table2;
Примітка: CROSS JOIN потенційно може повернути дуже великі набори результатів!
Наступний оператор SQL вибирає всіх клієнтів і всі замовлення:
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
CROSS JOIN Orders;
Примітка. Ключове слово CROSS JOIN повертає всі відповідні записи з обох таблиць незалежно від того, відповідає інша таблиця чи ні. Отже, якщо є рядки в «Клієнти», які не мають збігів у «Замовленнях», або якщо є рядки в «Замовленнях», які не мають збігів у «Клієнтах», ці рядки також будуть перераховані.
Якщо додати пропозицію WHERE (якщо table1 і table2 мають зв’язок), CROSS JOIN дасть той самий результат, що й пропозиція INNER JOIN:
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
CROSS JOIN Orders
WHERE Customers.CustomerID=Orders.CustomerID;
Самооб’єднання є звичайним об’єднанням, але таблиця об’єднується сама з собою.
Синтаксис самооб'єднання
SELECT column_name(s)
FROM table1 T1, table1 T2
WHERE condition;
T1 і T2 є різними псевдонімами для однієї таблиці.
Наступний оператор SQL відповідає клієнтам з одного міста:
SELECT A.CustomerName AS CustomerName1, B.CustomerName AS CustomerName2, A.City
FROM Customers A, Customers B
WHERE A.CustomerID <> B.CustomerID
AND A.City = B.City
ORDER BY A.City;
Оператор UNION використовується для об’єднання набору результатів двох або більше операторів SELECT.
Кожен оператор SELECT у UNION повинен мати однакову кількість стовпців
Стовпці також повинні мати подібні типи даних
Стовпці в кожному операторі SELECT також повинні бути в тому самому порядку
Синтаксис UNION
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
Оператор UNION за замовчуванням вибирає лише різні значення. Щоб дозволити повторювані значення, використовуйте UNION ALL:
SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;
Примітка. Назви стовпців у наборі результатів зазвичай збігаються з назвами стовпців у першому операторі SELECT.
Наступний оператор SQL повертає міста (тільки різні значення) з таблиці «Клієнти» та «Постачальники»:
SELECT City FROM Customers
UNION
SELECT City FROM Suppliers
ORDER BY City;
Примітка: якщо деякі клієнти або постачальники мають одне й те саме місто, кожне місто буде вказано лише один раз, оскільки UNION вибирає лише різні значення. Використовуйте UNION ALL, щоб також вибрати повторювані значення!
Наступний оператор SQL повертає міста (також повторювані значення) з обох таблиць «Клієнти» та «Постачальники».
SELECT City FROM Customers
UNION ALL
SELECT City FROM Suppliers
ORDER BY City;
Наступний оператор SQL повертає німецькі міста (лише різні значення) з обох таблиць «Клієнти» та «Постачальники».
SELECT City, Country FROM Customers
WHERE Country='Germany'
UNION
SELECT City, Country FROM Suppliers
WHERE Country='Germany'
ORDER BY City;
Наступний оператор SQL повертає німецькі міста (також повторювані значення) з таблиці «Клієнти» та «Постачальники»:
SELECT City, Country FROM Customers
WHERE Country='Germany'
UNION ALL
SELECT City, Country FROM Suppliers
WHERE Country='Germany'
ORDER BY City;
Наступний оператор SQL містить список усіх клієнтів і постачальників:
SELECT 'Customer' AS Type, ContactName, City, Country
FROM Customers
UNION
SELECT 'Supplier', ContactName, City, Country
FROM Suppliers;
Підзапити (вкладені запити) – це запити, які використовуються в інструкціях SELECT, INSERT, UPDATE чи DELETE.
SELECT FirstName, LastName as Name, BirthDate
FROM Person.Personas pc
JOIN HumanResources.Employeeas he
ON pc.BusinessEntityID = he.BusinessEntityID
WHERE BirthDate = (SELECT MIN (BirthDate) FROM HumanResources.Employee);
Підзапити (вкладені запити) – це запити, які використовуються в інструкціях SELECT,
INSERT, UPDATE чи DELETE.
SELECT ProductID, Name
FROM Product
WHERE Color NOT IN
(SELECT Color
FROM Product
WHERE ProductID = 5)
Підзапит є пов'язаним, якщо в ньому (у пропозиціях WHERE, HAVING) вказано стовпець таблиці зовнішнього запиту.
SELECT ord1.OrderDate
FROM Order ASord1
WHERE ord1.OrderDate = (SELECT MIN (OrderDate)
FROM Order ASord2 WHERE ord2.CustomerID = ord1.CustomerID)
• Вкладені запити можуть бути вказані в інструкціях: SELECT, INSERT, UPDATE чи DELETE.
• Кожен підзапит може містити один або більше підзапитів.
• Пропозиція WHERE зовнішнього запиту має бути сумісною для
з'єднання зі стовпцем у списку вибору вкладеного запиту.
Індекси
Організація пам'яті баз даних
Сторінка – основна одиниця зберігання інформації в SQLServer
Сторінки даних містять велику частину даних, які виводяться в таблиці. На сторінці даних знаходяться рядки даних з усіма даними, крім даних типу text, ntext, image, nvarchar(max), varchar(max) та varbinary(max).
Сторінки індексів використовуються для прискорення доступу до даних. Містять списки значень одного або кількох полів таблиці та їх асоціації з номерами записів самої таблиці.
Екстент - основна одиниця розподілу пам'яті в базі даних
Купа – таблиця, яка має кластеризованого індексу.
Рядки даних зберігаються без певного порядку та будь-який порядок у
послідовність сторінок даних відсутня.
Індекс – об'єкт бази даних, створюваний з метою підвищення продуктивності пошуку
даних.
Прискорення роботи з використанням індексів досягається в першу чергу за рахунок того, що
індекс має структуру, оптимізовану під пошук – наприклад, збалансоване дерево.
Кластеризований індекс – упорядкований індекс, змішаний із даними.
На листовому рівні перебувають усі дійсні дані таблиці.
Некластеризований індекс – невпорядкований індекс на листовому рівні якого знаходиться ідентифікатор рядка (RID), що вказує на місце зберігання інших даних.
Збережені процедури MySQL аналогічні процедурам в інших мовах програмування:
• вони обробляють вхідні параметри і повертають зухвалою процедурою або пакетом значення у вигляді вихідних параметрів;
• вони містять програмні інструкції, які виконують операції у базі даних, у тому числі, що викликають інші процедури;
• вони повертають значення стану процедури, що викликає, або пакету, таким чином передаючи відомості про успішне або неуспішне завершення (і причини останнього).
Створення процедури, що зберігається
CREATE PROCEDURE getAllClients()
BEGIN
SELECT * FROM clients;
END
CALL getAllClients();
Функції користувача
Функція, що визначається користувачем, являє собою підпрограму,
яка приймає параметри, виконує дії, такі як складні
обчислення, а потім повертає результат цих дій як значення.
Значення, що повертається, має бути скалярним.
Створення функції
CREATE FUNCTION
Hello() RETURNS VARCHAR(30)
BEGIN
DECLARE MyVar VARCHAR(30);
SET MyVar = ‘Hello World!’;
RETURN MyVar;
END;
SELECT Hello();
Транзакцією називається виконання послідовності команд (SQL-конструкцій) базі даних, яка або фіксується при успішній реалізації кожної команди, або скасовується при невдалому виконанні хоча б однієї команди.
START TRANSACTION;
INSERT MyUserName (FName, Lname)
VALUES ( ‘TestName0’ , ‘TestLName0’ );
INSERT MyUserTell (IdUser, TellN)
VALUES (@id = @@IDENTITY, ‘(097)2224455’ );
INSERT MyUserInfo (IdUser, Bdate)
VALUES(@id, ‘1990-01-02’ );
COMMIT;
Відкат транзакції - це дія, що забезпечує анулювання всіх змін даних, зроблених у тілі поточної незавершеної транзакції.
START TRANSACTION;
INSERT MyUserName (FName, Lname)
VALUES ( ‘TestName0’ , ‘TestLName0’ );
INSERT MyUserTell (IdUser, TellN)
VALUES (@id = @@IDENTITY, ‘(097)2224455’ );
INSERT MyUserInfo (IdUser, Bdate)
VALUES(@id, ‘1990-01-02’ );
ROLLBACK;
При виконанні транзакцій кількома користувачами однієї бази даних можуть виникати такі проблеми:
• Dirtyreads
• Non-repeatablereads
• Phantomreads
Dirtyreads - "брудне" читання. Перший користувач починає транзакцію, яка змінює дані. У цей час інший користувач (або транзакція, що створюється ним) витягує частково змінені дані, які є коректними.
Non-repeatablereads – неповторне читання. Перший користувач починає транзакцію, змінює дані. В цей час інший користувач починає та завершує іншу транзакцію. Перший користувач при повторному читанні даних (наприклад, якщо його транзакцію входить кілька інструкцій SELECT) отримує інший набір записів.
Phantomreads – читання фантомів. Перший Користувач починає транзакцію, яка обирає дані з таблиці. В цей час інший Користувач починає та завершує транзакцію, вставляє або видаляє записи. Перший користувач отримає інший набір даних, містить фантоми - видалені або змінені рядки.
Від неповторного читання воно відрізняється тим, що результат повторного звернення до даних змінився не через зміну/видалення самих цих даних, а через появу нових (фантомних) даних.
Для вирішення цих проблем розроблено чотири рівні ізоляції транзакції в SQL:
• Read uncommitted.
• Read committed.
• Repeatableread.
• Serializable.
Readuncommitted.Транзакція може зчитувати дані, з якими працюють інші транзакції. Застосування цього рівня ізоляції може призвести до перелічених проблем.
Readcommitted. Транзакція не може прочитувати дані, з якими працюють інші транзакції. Застосування цього рівня ізоляції унеможливлює проблему «брудного» читання.
Repeatableread.Транзакція не може зчитувати дані, з якими працюють інші транзакції. Інші транзакції також можуть зчитувати дані, з якими працює ця транзакція. Застосування цього рівня ізоляції унеможливлює всі проблеми, крім читання фантомів.
Serializable.Транзакція повністю ізольована від інших транзакцій. Застосування цього рівня ізоляція повністю виключає всі проблеми.
Рівні ізольованості транзакцій. Застосування SQL.
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN;
START TRANSACTION;
INSERT MyUserName (FName, Lname)
VALUES ( ‘TestName0’ , ‘TestLName0’ );
INSERT MyUserTell (IdUser, TellN)
VALUES (@id = @@IDENTITY, ‘(097)2224455’ );
INSERT MyUserInfo (IdUser, Bdate)
VALUES(@id, ‘1990-01-02’ );
ROLLBACK;
Тригер – це обробник, який можна виконати під час виконання операцій INSERT, UPDATE, DELETE
CREATE TRIGGER new_profile
AFTER INSERT ON users
FOR EACH ROW
BEGIN
INSERT INTO profiles(user_id) VALUES (NEW.id);
END;
Рівні ізольованості транзакцій, відмінності реалізації