Advertisement
GeorgiLukanov87

SQL basics

Dec 23rd, 2024 (edited)
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 9.61 KB | None | 0 0
  1. Принцип на декларативност:
  2. SQL е декларативен език - указвате КАКВО искате да получите, а не КАК точно да се изпълни
  3. Системата за управление на базата данни сама определя най-ефективния начин за изпълнение
  4.  
  5. 1.Работа с таблици (релации):
  6. Данните се съхраняват в таблици със редове и колони
  7. Всяка таблица има уникално име и дефинирана структура
  8. Колоните имат определен тип данни (текст, число, дата и т.н.)
  9.  
  10. 2.Основни операции (CRUD):
  11. SELECT - извличане на данни
  12. INSERT - добавяне на нови записи
  13. UPDATE - промяна на съществуващи данни
  14. DELETE - изтриване на записи
  15.  
  16. 3.Връзки между таблиците:
  17. Създават се чрез външни ключове (FOREIGN KEYS)
  18. Поддържат референциална цялост на данните
  19. Позволяват обединяване на таблици чрез JOIN операции
  20.  
  21. 4.Цялостност на данните:
  22. Първични ключове (PRIMARY KEYS) за уникална идентификация
  23. Ограничения (constraints) за валидност на данните
  24. Транзакции за атомарност на операциите
  25. ===================================================================================
  26. Транзакцията представлява логическа единица работа, която включва една или повече операции с базата данни. Тя се характеризира със свойствата ACID:
  27.  
  28. 1.Атомарност (Atomicity)
  29. Транзакцията е неделима - или всички операции се изпълняват успешно, или нито една
  30. Ако възникне грешка, всички промени се отменят (ROLLBACK)
  31. Пример: Банков превод - или сумата се изтегля от една сметка и постъпва в друга, или операцията изобщо не се извършва
  32.  
  33. 2.Консистентност (Consistency)
  34. Базата данни преминава от едно валидно състояние в друго
  35. Всички ограничения (constraints) се спазват
  36. Референциалната цялост се запазва
  37.  
  38. 3.Изолация (Isolation)
  39. Транзакциите са изолирани една от друга
  40. Промените от една незавършена транзакция не са видими за другите транзакции
  41. Различни нива на изолация определят как транзакциите си взаимодействат
  42.  
  43. 4.Дълготрайност (Durability)
  44. След успешно приключване, промените са постоянни
  45. Дори при срив на системата, данните се запазват
  46. ===================================================================================
  47. BEGIN TRANSACTION;
  48. -- Изтегляне на пари от първата сметка
  49. UPDATE сметки
  50. SET баланс = баланс - 1000
  51. WHERE сметка_id = 1;
  52. -- Внасяне на пари във втората сметка
  53. UPDATE сметки
  54. SET баланс = баланс + 1000
  55. WHERE сметка_id = 2;
  56. -- Ако всичко е наред, потвърждаваме промените
  57. COMMIT;
  58. -- Ако има проблем
  59. -- ROLLBACK;
  60. ===================================================================================
  61. Основни команди за работа с транзакции:
  62.  
  63. 1.BEGIN TRANSACTION - започва нова транзакция
  64. 2.COMMIT - потвърждава промените
  65. 3.ROLLBACK - отменя всички промени
  66. 4.SAVEPOINT - създава точка, до която може да се върнем
  67. 5.ROLLBACK TO SAVEPOINT - връща до определена точка
  68.  
  69. Нива на изолация:
  70. 1.READ UNCOMMITTED
  71. Най-ниско ниво
  72. Вижда се "мръсно" четене на незавършени транзакции
  73. Рядко се използва
  74.  
  75. 2.READ COMMITTED
  76. Вижда само потвърдени промени
  77. Стандартно ниво в много системи
  78. Предотвратява "мръсно" четене
  79.  
  80. 3.REPEATABLE READ
  81. Гарантира, че повторното четене връща същите данни
  82. Предотвратява нежелани промени по време на транзакция
  83.  
  84. 4.SERIALIZABLE
  85. Най-високо ниво на изолация
  86. Транзакциите се изпълняват сякаш са последователни
  87. Най-безопасно, но с най-ниска производителност
  88.  
  89. Примери за използване на транзакции:
  90. Финансови операции
  91. Обработка на поръчки
  92. Актуализация на свързани таблици
  93. Прехвърляне на данни между системи
  94. Сложни бизнес процеси
  95.  
  96. Важни практики:
  97. Транзакциите трябва да са възможно най-кратки
  98. Избягвайте дълги транзакции, които блокират ресурси
  99. Внимавайте с нивата на изолация
  100. Винаги предвиждайте обработка на грешки
  101. Тествайте поведението при конкурентен достъп
  102. ===================================================================================
  103. -- Таблица "служители"
  104. CREATE TABLE служители (
  105.     id INT PRIMARY KEY,
  106.     име VARCHAR(50),
  107.     отдел_id INT
  108. );
  109.  
  110. -- Таблица "отдели"
  111. CREATE TABLE отдели (
  112.     id INT PRIMARY KEY,
  113.     име_отдел VARCHAR(50)
  114. );
  115. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  116. 1.INNER JOIN (Вътрешно свързване)
  117.  
  118. SELECT с.име, о.име_отдел
  119. FROM служители с
  120. INNER JOIN отдели о ON с.отдел_id = о.id;
  121.  
  122. Връща само редовете, където има съвпадение в двете таблици
  123. Ако служител няма отдел или отдел няма служители, тези редове не се показват
  124. Най-често използваният тип JOIN
  125. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  126. 2.LEFT JOIN (Ляво външно свързване)
  127.  
  128. SELECT с.име, о.име_отдел
  129. FROM служители с
  130. LEFT JOIN отдели о ON с.отдел_id = о.id;
  131.  
  132. Връща ВСИЧКИ редове от лявата таблица (служители)
  133. Ако няма съвпадение в дясната таблица, полетата се попълват с NULL
  134. Полезно когато искате да видите всички служители, дори тези без отдел
  135. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  136. 3.RIGHT JOIN (Дясно външно свързване)
  137.  
  138. SELECT с.име, о.име_отдел
  139. FROM служители с
  140. RIGHT JOIN отдели о ON с.отдел_id = о.id;
  141.  
  142. Връща ВСИЧКИ редове от дясната таблица (отдели)
  143. Ако няма съвпадение в лявата таблица, полетата се попълват с NULL
  144. Полезно когато искате да видите всички отдели, дори празните
  145. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  146. 4.FULL JOIN (Пълно външно свързване)
  147.  
  148. SELECT с.име, о.име_отдел
  149. FROM служители с
  150. FULL JOIN отдели о ON с.отдел_id = о.id;
  151.  
  152. Връща ВСИЧКИ редове от ДВЕТЕ таблици
  153. Ако няма съвпадение в която и да е таблица, липсващите полета са NULL
  154. Показва пълната картина на данните
  155. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  156. 5.CROSS JOIN (Кръстосано свързване)
  157.  
  158. SELECT с.име, о.име_отдел
  159. FROM служители с
  160. CROSS JOIN отдели о;
  161.  
  162. Създава Декартово произведение - всеки ред от първата таблица със всеки ред от втората
  163. Не изисква условие за свързване
  164. Рядко се използва на практика поради големия брой резултати
  165. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  166. 6.SELF JOIN (Самосвързване)
  167.  
  168. SELECT с1.име AS служител, с2.име AS мениджър
  169. FROM служители с1
  170. LEFT JOIN служители с2 ON с1.мениджър_id = с2.id;
  171.  
  172. Свързване на таблица със самата себе си
  173. Полезно при йерархични връзки (например служител-мениджър)
  174. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  175.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement