Початок: Super-puper шпаргалка 100+ питань для співбесід та технічних інтерв’ю — Бази Даних, зокрема SQL (Частина 1)

Питання #50 Що таке транзакції в SQL?

Транзакція  це сукупність операцій, виконаних у логічній послідовності. Кожна транзакція виконується в цілому. Транзакції залишаються невидимі для інших користувачів бази даних, доки до результатів виконання SQL запитів, що входять у транзакцію, не буде застосовано запит до бази даних за допомогою команди COMMIT (про команди управління транзакціями йтиметься трішшшшечки нижче :mrgreen: ) .

Якщо будь-яка частина транзакції не виконується, вся транзакція буде позначена як невдала і не додана в базу даних. Якщо транзакція виконується, то означає, що всі оператори в цій транзакції правильні.

За необхідності користувачеві дозволено чітко вказувати командами, початок та кінець транзакції. Такі транзакції називаються явними транзакціями.

Питання #51 Як Ви поясните управління транзакціями?

Управління транзакціями це здатність керувати різними операціями над даними, які виконуються всередині реляційної СУБД. Передо всім це виконання операторів INSERT, UPDATE, DELETE тощо. Вони вкладаються в тіло транзакції, але ЗВЕРНІТЬ УВАГУ! негайної зміни даних не відбувається. Для остаточного завершення транзакції існують так звані команди управління транзакціями, за допомогою яких можна або зберегти в базі даних всі зміни, що відбулися у ході виконання транзакції, або повністю їх скасувати.

Команди, які використовуються для збереження транзакцій з TCL (Transaction Control Language):

  1. COMMIT  для збереження змін, доки ми не застосуємо цієї команди дані зберігаються у спеціально виділеній області тимчасової пам’яті;
  2. ROLLBACK  призначена для скасування змін ще не внесених у БД, тобто зміни у тимчасовій пам’яті ми можемо зробити, а після COMMIT уже по новій;
  3. SAVEPOINT  для установки особливих точок повернення, імена точок повернення повинні бути унікальними. Для внесення змін у якусь конкретну точку повернення слід застосовувати синтаксис ROLLBACK TO <ім’я точки повернення>.

Питання #52 Для чого потрібні транзакції SQL?

Обробка транзакцій гарантує цілісність інформації у Базі Даних. Таким чином, транзакція переводить базу даних з одного цілісного стану в інший. Також механізм транзакцій складає підґрунтя підходу ізольованості у багатокористувацьких системах, щоб з однією БД паралельно могли працювати декілька користувачів або прикладних програм.

Питання #53 Які властивості ACID?

Щоб успішно управляти базами даних, потрібно дотримуватися певних правил обробки набору команд, що входять у транзакцію. Для цього розроблено чотири правила, відомі як вимоги ACID (Atomicity, Consistency, Isolation, Durability  Неподільність, Узгодженість, Ізольованість, Стійкість). Вони гарантують правильність і надійність роботи системи.

Отож, властивості ACID транзакцій у SQL:

  • Atomicity (Атомарність, Неподільність) — означає, що всі операції в транзакції виконуються цілком або взагалі не виконуються.
  • Узгодженість (Consistency) — означає стан бази даних змінюється лише після успішної здійсненої транзакції.
  • Ізоляція (Isolation) — означає, якщо існує декілька транзакцій у Базі Даних, і вони виконуються одразу, остаточний стан БД буде таким самим, як якщо б операції були виконані послідовно. Іншими словами, дослівно  кожна транзакція є ізольованою одна від одної.
  • Стійкість — означає, що після завершення транзакції (після COMMIT ), вона зберігається у системі, і не може бути повернута в початковий (до початку транзакції) стан, тобто відбувається фіксація транзакції, яка збережеться навіть при “краші” чи втраті потужності системи.

Вказані вище правила виконує сервер. Оператор, людина, яка працює з Базою Даних тільки вибирає потрібний рівень ізоляції транзакцій, піклується про дотримання логічної цілісності даних та бізнес-правил. На цю особу покладаються обов’язки створення ефективних і логічно вірних алгоритмів обробки даних. Вона вирішує, які команди повинні виконуватися як одна транзакція SQL, а які можуть бути розбиті на кілька послідовно виконуваних транзакцій.

Узагалі… рекомендується: використовувати невеликі транзакції SQL, тобто включати в транзакцію якомога менше команд, змінюючи при цьому мінімум даних так легше робити “відкати назад”.

Питання #54 Що таке блокування в SQL?

Ще один метод підвищення ефективності бази даних блокування. Блокуванням в SQL називається тимчасове обмеження на виконання деяких операцій обробки даних у Базі Даних. Блокування може бути накладене як на окремий рядок таблиці, так і на всю базу даних.

Транзакції та блокування тісно пов’язані одна з одною. Блокування SQL, транзакції SQL накладаються на дані, щоб забезпечити вище згадані вимоги ACID.

Блокування SQL традиційно використовуються у невеликих транзакціях заради збереження цілісності бази даних, у разі одночасного виконання одного й того ж фрагменту даних.

Механізм блокування являє собою метод управління паралельними процесами, при якому об’єкт БД не може бути модифікований без  відома транзакції, тобто відбувається блокування доступу до об’єкту з боку інших транзакцій, що виключає непередбачувану зміну об’єкта.

Без використання блокування декілька транзакцій б наклали зміни на одні й ті ж дані і виникла б ситуація Deadlock. Про механізм взаємоблокування Deadlock теж йтиметься нижче.

Кожне блокування у БД характеризується параметрами:

  • гранулярність або розмір блокування;
  • типами, режимами блокування;
  • тривалістю режиму ізоляції блокування;

Питання #55 Які види блокувань БД назвете?

Розрізняють 2 види блокувань БД:

  • Блокування запису  транзакція блокує рядки в таблицях таким чином, що запити інших транзакцій до цих рядків буде скасовано;
  • Блокування читання транзакція блокує рядки так, що запит з боку іншої транзакції на блокування записів цих рядків буде відхилено, а на блокування читання  прийнято.

Питання #56 Назвіть режими блокування в БД?

Розділювальне блокування (Shared locks)  резервує ресурс (сторінку або рядок) для читання. Інші процеси не можуть змінювати заблоковані таким чином дані. Але, з іншого боку, кілька процесів розділюваного блокування можуть одночасно накладатися на одну й ту ж область даних. Іншими словами одночасно все ж таки можуть виконуватися кілька процесів.

Блокування оновлення (Update locks)  застосовується до даних, які можна оновити. На деяких даних може бути закріплено лише одне оновлення.

Update locks блокування може бути встановлене ​​на ресурс тільки при відсутності на ньому іншого блокування оновлення або монопольного блокування. З іншого боку, цей тип блокування можна встановлювати на об’єкти, де встановлене роздільне блокування. В такому випадку блокування поновлення накладає на об’єкт інше блокування. Якщо транзакція, яка модифікує об’єкт, підтверджується, і у об’єкту немає ніяких інших SQL блокувань, блокування поновлення перетворюється у монопольне блокування. Але у об’єкта Бази даних може бути тільки одне блокування оновлення SQL!

Монопольне блокування (Exclusive locks) резервує сторінку або рядок для монопольного використання однієї транзакції SQL. Блокування цього типу застосовується інструкціями DML (INSERT, UPDATE і DELETE), які модифікують ресурс. Монопольне блокування не можна встановити, якщо на ресурс вже встановлене розподілене або монопольне блокування іншим процесом, тобто на ресурс може бути встановлене тільки одне монопольне блокування SQL. На ресурс (сторінку або рядок) з встановленим монопольним блокуванням не можна встановити ніяке інше блокування.

Блокування з намірами (Intent locks)  це більше механізм сповіщення, того що транзакція має намір заблокувати нижчестоящий по ієрархії об’єкт.

Схема блокування (Schema locks)  використовується для операцій, коли схему або структуру бази даних потрібно оновлювати.

Блокування (Bulk Update locks)  використовується для масових операцій, коли використовується підказка TABLOCK.

Більшість СУБД автоматично вибирає відповідний режим блокування SQL, залежно від типу операції (читання або запис).

Стосовно інших видів блокувань, від однієї до іншої СУБД види блокувань дещо можуть різнитися, наприклад у середовищі SQL-server розрізняють ще короткочасні блокування (Latch lock) і взаємні блокування (Spin lock).

Питання #57 Що таке укрупнення блокувань?

Якщо в процесі транзакції є велика кількість блокувань одного рівня, то компонент СУБД автоматично об’єднує ці блокування в таблиці одного рівня. Ось цей процес перетворення великого числа блокувань називається укрупненням блокувань (Lock escalation).

Порогом укрупнення називається межа, на якій система баз даних застосовує укрупнення блокувань. Пороги укрупнення встановлюються динамічно системою і не вимагають, як правило, додаткових налаштувань. В даний час граничним значенням укрупнення блокувань вважається 5000 блокувань.

Основною проблемою, що стосується укрупнення блокувань, є та обставина, що рішення, коли здійснювати укрупнення, приймає сервер баз даних, і це рішення може бути далеко не оптимальним для додатків, які мають різні вимоги.

Питання #58 Взаємоблокування у базах даних SQL…

Механізм взаємоблокування (Deadlock)  це коли дві транзакції блокують одна одну, і ні туди і ні сюди. Ситуація коли виникає конфлікт між кількома операціями. Зокрема, перша транзакція блокує об’єкт бази даних, доступ до якого хоче отримати інша транзакція, і навпаки. Загалом, взаємоблокування може бути викликане декількома транзакціями, які створюють цикл залежностей.

Питання #59 Поняття гранулярності:

Гранулярність блокування визначає, який ресурс блокується в одній спробі SQL блокування: кількість рядків, сторінки, індексний ключ або діапазон індексних ключів, таблиці, саму базу даних

Рядок є найменшим ресурсом, який можна заблокувати. Блокування рівня рядка також включає як рядки даних, так і елементи індексів. Блокування на рівні рядка означає, що блокується тільки рядок, до якого звертається додаток. Тому всі інші рядки таблиці з блокуваннями залишаються вільними і їх можуть використовувати інші додатки.

Гранулярність блокування впливає на одночасний доступ до роботи з Базою Даних. Загалом, чим вищий рівень гранулярності, тим більше скорочується можливість спільного доступу до даних. Це означає, що блокування рівня рядків максимізує одночасний конкурентний доступ, тому що блокується усього лише один рядок сторінки, залишаючи всі інші рядки доступними для інших процесів. З іншого боку, низький рівень блокування збільшує системні трудозатрати, оскільки для кожного окремого рядка потрібне окреме блокування. Блокування на рівні сторінок і таблиць обмежує рівень доступності даних, але з іншого боку зменшує системні витрати.

Питання #60 Функції SQL

Функції SQL, як і математичні функції приймають параметри, виконують дії, такі як складні обчислення, а потім повертають результат цих дій у вигляді значення.

Стандартні функції SQL: обробка текстових значень, перетворення типів даних і маніпуляцій над датами.

Варто відзначити, що навідміну від SQL-операторів, функції SQL не стандартизовані для всіх СУБД, тобто для виконання одних і тих же операції над даними, різні СУБД мають свої власні імена функцій. Це означає, що код запиту написаний в одній СУБД може не працювати в іншій, і це потрібно враховувати коли тестуватимете додаток з базою даних. Тестування Бази Даних — практичні поради початківцям, як якісно перевірити БД

Питання #61 Яка різниця між типами даних DATETIME і TIMESTAMP?

DATETIME призначений для зберігання цілого ключа YYYYMMDDHHMMSS. І цей час не залежить від часового поясу налаштованого на сервері. Зберігає 8 байт. TIMESTAMP зберігає кількість секунд, які прошли від опівночі 1 січня 1970 року по часу від Грінвіча. При отриманні результату із бази, цей час відображається з врахуванням часового поясу. Зберігає 4 байти.

Кілька питань озвучених на DOU:

Питання #62 Яка різниця між типами CHAR та VARCHAR?

Обидва ці типи використовуються для зберігання текстової інформації обмеженої довжини, а відмінності між ними такі:

Тип CHAR зберігає значення фіксованої довжини. Якщо рядок, поміщається в колонку даного типу, має меншу довжину, ніж довжина типу то рядок буде доповнений пробілами. Наприклад, якщо в колонку типу CHAR (10) записати рядок SQL, то вона збережеться як SQL……..(замість крапок пробіли).

Тип VARCHAR зберігає значення змінної довжини. Під кожне значення цього типу виділяється стільки пам’яті, скільки потрібно для цього конкретного значення.

Окрім того для типу CHAR використовується статичний розподіл пам’яті, через що операції з ними є швидші, ніж з VARCHAR.

Таким чином, тип CHAR гарно підходить для зберігання строкових даних фіксованої довжини (наприклад, інвентарних номерів, хешів), а для інших рядків більше підійдуть VARCHAR або NVARCHAR.

Питання #63 Яка різниця між типами VARCHAR та NVARCHAR?

Тип NVARCHAR, мабуть, найуніверсальніший з стрічкових типів даних у БД. Він дозволяє зберігати рядки змінної довжини в форматі Unicode. У цьому форматі кожен символ займає 2 байти, а саме кодування містить 65 536 символів і включає в себе всі мови світу, в тому числі ієрогліфи.

Тип VARCHAR зберігає дані у форматі кожен символ займає 1 байт, але кодування містить усього 256 символів. Через це для кожної мови світу виділяється своє кодування.

Таким чином, в форматі VARCHAR варто зберігати рядкові дані, які точно не доведеться переводити (наприклад, адреси електронної пошти). Для інших випадків більше підійде NVARCHAR.

Питання #64 Що таке агрегатні функції в SQL?

Агрегатні функції  це функції SQL, які повертають одне єдине значення, розраховане з декількох значень стовпчиків.

Деякі з сукупних функцій в SQL:

  • Count () — повертає підрахунок кількості рядків, які повертаються виразом SQL.
  • Max() повертає максимальне значення з загального значення.
  • Min ()  повертає мінімальне значення з загального значення.
  • Avg ()  повертає середнє значення загальних значень.
  • Sum ()  повертає суму значень, що повертаються виразом SQL.

Питання #65 Що таке скалярні функції в SQL?

Скалярні функції в SQL це функції, які повертають одне значення, обробляючи одне значення в SQL.

Приклади скалярних функцій SQL:

  • UCASE ()  використовується для перетворення рядка у верхній регістр.
  • LCASE ()  використовується для перетворення рядка в нижній регістр.
  • ROUND ()  використовується для обігу числа до вказаних десяткових знаків.
  • NOW ()  використовується для отримання поточної дати та часу системи.
  • LEN ()  використовується для пошуку довжини рядка.
  • SUBSTRING () або MID ()  MID і SUBSTRING є синонімами в SQL. Вони використовуються для вилучення підстроки з рядка, вказавши початковий та кінцевий індекс. Синтаксис  SUBSTRING (ColumnName, startIndex, EndIndex).
  • LOCATE() використовується для пошуку індексу в рядку. Синтаксис LOCATE (character, ColumnName).
  • LTRIM ()  використовується для обробки пробілів зліва.
  • RTRIM ()  використовується для обробки пробілів з правого боку.

Питання #66 Що таке COALESCE функція?

Функція COALESCE використовується для повернення першого значення не NULL з декількох значень або виразів, переданих в функцію COALESCE у якості параметрів.

Приклад функції COALESCE:

COALESCE (NULL, NULL, 5, ‘QAGROUP’) поверне значення 5.

COALESCE (NULL, NULL, NULL) повертає значення NULL, оскільки в списку параметрів не зустрічається іншого значення окрім NULL.

Питання #67 Що робить функція EXIST? 

Функція EXIST повертає TRUE, якщо внутрішній запит аргументу функції повертає один чи більше рядків і поверне FALSE, якщо запит повертає 0 стрічок.

Питання #68 Функції ранжування в SQL що це таке і які існують?

Для обробки текстових значень, перетворення типів даних і маніпуляцій над датами. Реляційна модель побудови Баз Даних виходить з того факту, що рядки в таблиці не мають порядку, що є прямим наслідком теоретикомножинного підходу. Тому наївними виглядають питання новачків, які запитують: “А як мені отримати останній доданий в таблицю рядок?” Відповіддю на питання буденіяк“, якщо в таблиці не передбачений стовпець, що містить дату вставки рядка, або не використовується послідовна нумерація рядків, що реалізується в багатьох СУБД за допомогою стовпчика з значенням автоінкремента. Тоді можна вибрати рядок з максимальним значенням дати або лічильника. Залежності від використаної функції, деякі стрічки можуть співпадати.

Transact-SQL для прикладу містить такі функції ранжування: 

  • RANK,
  • NTILE,
  • DENSE_RANK,
  • ROW_NUMBER

Питання #69 Що таке курсори в SQL?

Курсори  це об’єкти в SQL, які використовуються для переміщення набору результатів запиту SQL один за іншим.

Порядок роботи з курсорами у SQL наступний: визначити курсор (DECLARE) ➡ відкрити курсор (OPEN) ➡ отримати запис з курсора (FETCH) ➡ обробити запис ➡ закрити курсор(CLOSE).

CURSOR cselectitem
IS
	SELECT id, name FROM items; /* Оголошуємо курсор, привязуючи до нього SQL — запит. */
BEGIN
	OPEN cselectitem; /* Далі перед використанням курсор відкриваємо */
	LOOP
		FETCH cselectitem
			INTO item_id, item_name; /* У циклі перебираємо стрічки, 
                                                    використовуючи конструкцію FETCH, і значення записуємо у змінну */
                          
		EXIT WHEN cselectitem%NOTFOUND; /*  Виходимо з циклу, коли досягнуто кінця 
                                                    результуючого набору */
	END LOOP;
 
	CLOSE cselectitem; /* Закриваємо курсор */
END

Питання #70 Що таке процедури SQL?

Процедура складається з множини операторів SQL, які згруповані разом як одиниця для вирішення конкретних проблем або виконання набору пов’язаних завдань.

Питання #71 Що таке збережена процедура SQL? Поясніть її переваги?

Збережені процедури  це іменовані процедури SQL (сукупність вбудованих операторів SQL), які є частиною Бази Даних і зберігаються на сервері і можуть бути викликані іншими процедурами, активаторами та іншими програмами. Як і в процедурах інших мов програмування у збережених процедурах SQL можуть бути цикли і галуження.

CREATE PROCEDURE procedureName AS Begin Set of SQL statements End

 Переваги збереженої процедури:

  • збережені процедури покращують продуктивність, оскільки процедури попередньо складені, а також кешовані;
  • зі збереженими процедурами легко робити запити, їх легко підправляти і повторно використовувати, оскільки будь-які зміни потрібно зробити в одному місці;
  • скорочують використання мережі та трафіку;
  • покращують безпеку БД, оскільки збережені процедури обмежують прямий доступ до бази даних.

Питання #72 Що таке тригери в SQL?

Тригери  це спеціальний тип збережених процедур, які виконуються при виникненні певної події (INSERT, DELETE або UPDATE).

Тригери зберігаються і управляються СУБД.

Тригери використовуються для підтримання цілісності БД. Тригер не може бути викликаним і виконаним у ручну. СУБД автоматично викликає його після модифікації даних у відповідній таблиці. У цьому і полягає відмінність тригерів від збережених процедур, які потрібно виконувати викликом CALL. Тригери також можуть викликати інші процедури. Тригер може містити виклики: INSERT, DELETE і UPDATE всередині себе, таким чином викликаючи інший тригер. Такі тригери називаються (nested вкладені).

CREATE TRIGGER 
triggerName 
triggerTime{Before or After}
triggerEvent{Insert, Update or Delete}     
ON tableName 
FOR EACH ROW     
triggerBody

Питання #73 Що таке підзапит?

Підзапит (Sub-query)  це запит вкладений у інший запит. До речі, так само транзакції теж можуть бути вкладеними транзакціями.

Кілька прикладів Sub-query:

SELECT * FROM tableA WHERE id IN (SELECT id FROM tableB)
SELECT * FROM tableA WHERE id > (SELECT AVG(id) FROM tableA)
SELECT tA.* FROM (SELECT * FROM tableA WHERE col IS NOT NULL) tA, tableB tB 
WHERE tA.id=tB.id

Питання #74 Що таке оптимізація запитів?

Оптимізація запитів  це частина процесу запиту, функція СУБД, коли СУБД порівнює різні стратегії запитів та вибирає найоптимальніший, який використовує найменше ресурсу машини чи Бази даних і є найшвидшим.

Питання #75 Що таке orphams? Як ми їх можемо видалити з таблиці?

Дослівний переклад з англійської “записи-сироти” це записи з зовнішнім ключем до батьківського запису, який не існує або його видалили.

Для видалення таких записів з бази даних нам потрібно створити з’єднання батьківської та дочірньої таблицями, а потім видалити рядки з дочірньої таблиці, де ідентифікатор IS NULL.

Пам’ятайте: видалення за допомогою з’єднань вимагає назви / псевдоніма, щоб вказати таблицю, які дані слід видалити.

Питання #76 Для яких числових типів неприпустимо використовувати операцію додавання (віднімання), а значить і функцію SUM ()?

У якості операндів операцій додавання і віднімання  можна використовувати будь-які значення числової категорії, окрім типів даних bit. Ну, і Null не потрібно обробляти. І дати.

Продовження у наступній частині: Питання на співбесіді по SQL — (Частина 3)

Нагадуємо: пишіть в коментарях, а які запитання на співбесідах та інтерв’ю задавали Вам? Разом будемо поповнювати наш список !!!

Related posts

Командний рядок

Що таке командна стрічка, кілька прикладів як із нею працювати

Сьогодні я розповідатиму про один із най-най-най необхідних інструментів для будь-якого тестувальника, та й не тільки тестувальника. Інструменту без якого фактично не можливо повноцінно...

Читати більше
комбінації гарячих клавіш

Гарячі клавіші клавіатури — шпаргалка корисна кожному

Застосування гарячих клавіш у роботі за комп’ютером, допомагає виконувати повторювані дії значно швидше. Ефект оптимізації досягається, бо ми зрізаємо кут, відразу натиснувши комбінацію клавіш — замість...

Читати більше

Leave a Comment

Цей сайт використовує Akismet для зменшення спаму. Дізнайтеся, як обробляються ваші дані коментарів.