Ось готовий урок, створений за твоїм майстер-промптом. Вмикай уяву — ми в аудиторії Сандерса в Гарварді!
🎓 CS50: Магія змін. INSERT, UPDATE та DELETE
Привіт, друзі! Радий вас бачити. 👋
Минулого разу ми з вами навчилися дивитися на дані. Ми використовували SELECT, щоб знайти голку в копиці сіна. Але давайте будемо чесними: світ не стоїть на місці. Люди змінюють прізвища, товари дорожчають, а деякі повідомлення хочеться видалити назавжди, чи не так?
1. 🔥 Вступ: Проблема порожнього складу
Уявіть, що ви відкрили найкрутішу кав'ярню в Києві. Ви купили дорогезну систему обліку, встановили базу даних... і вона порожня.
Порожня таблиця — це як порожній склад. Вона ідеально структурована, але абсолютно даремна. Або уявіть іншу ситуацію: ви помилилися і ввели ціну на лате — 500 грн замість 50. Якщо ви не вмієте це виправити, у вас не буде клієнтів.
Запитайте себе: 1. Як дані взагалі потрапляють у ці таблиці вперше? 2. Що станеться, якщо я захочу змінити ціну тільки для одного товару, а не для всіх одразу?
Сьогодні ми перестанемо бути пасивними спостерігачами. Сьогодні ми стаємо архітекторами змін. Ми вивчимо три команди, на яких тримається весь динамічний інтернет: INSERT (додати), UPDATE (змінити) та DELETE (знищити).
2. 🧠 Теоретична база (Як це працює?)
Давайте розберемо це без складних термінів. База даних — це по суті великий ексель-файл на стероїдах.
🐣 INSERT (Народження даних)
Це найпростіше. Ви кажете базі: "Візьми цей рядок і поклади його в цю таблицю". * Аналогія: Ви заповнюєте анкету на нову візу. Ви вписуєте дані в конкретні поля. Ви не можете написати ім'я в поле для дати народження — база (як і консул) цього не пробачить.
🔧 UPDATE (Робота хірурга)
Тут стає цікавіше. Ви хочете змінити існуючий запис. * Аналогія: Ви редагуєте контакт у телефоні. * Критично важливо: Ви маєте вказати ЩО змінити і КОМУ змінити. Якщо ви скажете телефону "Зміни ім'я на 'Мама'", але не вкажете який саме контакт, ваш телефон може перейменувати всіх ваших друзів на "Мама". У SQL це реальна небезпека!
🗑 DELETE (Шредер)
Видалення рядка. * Аналогія: Ви кидаєте папірець у шредер. * Під капотом: База даних зазвичай не стирає байти з жорсткого диска миттєво (це довго). Вона просто ставить помітку "це місце вільне, сюди можна писати нове".
❗️ Що треба запам'ятати залізним правилом: Команди
UPDATEтаDELETEмайже завжди повинні йти в парі з умовоюWHERE. БезWHEREви застосуєте зміни до ВСІЄЇ таблиці. Це класичний спосіб бути звільненим у перший день роботи.
3. 🧪 Приклади (Кодимо!)
Давайте працювати з нашою уявною кав'ярнею. У нас є таблиця menu:
* id (унікальний номер)
* name (назва напою)
* price (ціна)
* category (категорія)
Крок 1: Додаємо життя (INSERT)
Ми хочемо додати класичний еспресо.
Чого ми очікуємо? Що в таблиці з'явиться один новий рядок.
INSERT INTO menu (name, price, category)
VALUES ('Espresso', 45, 'Coffee');
Результат: База каже INSERT 0 1 (успішно додано 1 рядок). Тепер у нас є меню!
Крок 2: Інфляція (UPDATE)
Постачальник підняв ціни на зерна. Еспресо тепер коштує 50.
Питання до вас: Що станеться, якщо я напишу просто UPDATE menu SET price = 50;?
(Пауза для роздумів)
Відповідь: Усі напої, включаючи чай, воду і тістечка, стануть коштувати 50. Катастрофа.
Ось як робить професіонал:
UPDATE menu
SET price = 50
WHERE name = 'Espresso';
Ми використовуємо "скальпель" (WHERE), а не "кувалду".
Крок 3: Невдалий експеримент (DELETE)
Ми спробували продавати "Лате з оселедцем". Ніхто не купує. Треба прибрати це з меню.
DELETE FROM menu
WHERE name = 'Herring Latte';
Результат: Запис зник назавжди.
4. 🛠 Практична частина
А тепер ваша черга. Уявіть, що ви адміністратор цієї бази даних. Відкрийте свій SQL-редактор (або уявіть його).
Завдання 1: Новинка сезону
Додайте в таблицю menu новий напій: "Pumpkin Spice Latte", ціна 85, категорія 'Coffee'.
Завдання 2: Знижка для друзів
Змініть ціну для "Pumpkin Spice Latte" на 70 (бо ніхто не купує за 85). Не забудьте про WHERE!
Завдання 3: Глобальна акція
У нас "Тиждень чаю". Зробіть знижку 10% на всі позиції, де category дорівнює 'Tea'.
(Підказка: ціна = ціна * 0.9)
Завдання 4: Виправлення помилки (Кейс) Ви випадково додали товар з назвою "Test" і ціною 0. Напишіть запит, який видалить усі товари, де ціна дорівнює 0.
Завдання 5: "А що, якщо..."
Що, на вашу думку, поверне база даних, якщо ви спробуєте зробити DELETE напою, якого не існує (наприклад, "Cola")? Помилку чи ні?
(Спробуйте здогадатися, а потім перевірте).
5. 💡 Мислення як у розробника
Ви вже знаєте синтаксис. Але як думає Senior Developer?
1. Правило "SELECT перед UPDATE"
Перш ніж написати:
DELETE FROM users WHERE last_login < '2023-01-01';
Досвідчений розробник спочатку напише:
SELECT * FROM users WHERE last_login < '2023-01-01';
Чому? Щоб побачити на власні очі, що саме він зараз знищить. Перевіряй двічі, видаляй один раз.
2. Soft Delete (М'яке видалення)
У реальних великих компаніях дані рідко видаляють фізично (DELETE). Замість цього додають стовпчик is_active або deleted_at.
* Замість знищення запису, ми робимо UPDATE menu SET is_active = false WHERE id = 5.
* Навіщо? Бо якщо клієнт подзвонить і скаже "Ви видалили мій акаунт помилково!", ви зможете все відновити за секунду. Шредер назад не склеїш, а галочку повернути можна.
3. Транзакції (Страховка)
Ми про це поговоримо пізніше, але знайте: професіонали загортають зміни в транзакції. Це як "Зберегтися" перед битвою з босом у грі. Якщо щось піде не так під час оновлення — можна відкотитися назад.
6. 🧩 Підсумок
Друзі, вітаю! 👏
Сьогодні ви отримали владу над даними. 1. Ви вмієте створювати нові сутності (INSERT). 2. Ви вмієте адаптувати дані під реальність (UPDATE). 3. Ви вмієте прибирати сміття (DELETE).
Ви більше не пасивні читачі бази даних. Ви — її редактори.
Наступного разу:
У нас є таблиця menu. У нас буде таблиця orders (замовлення). Але як зв'язати каву з конкретним замовленням, не дублюючи назву напою тисячу разів?
Ми зануримося в тему JOINs та зв'язків між таблицями. Це саме те, що робить базу даних "реляційною".
А поки що — практикуйтеся і не забувайте про WHERE! Це був CS50. 🏛️
Коментар для користувача:
Я можу адаптувати цей урок під конкретну SQL-систему (PostgreSQL, MySQL, SQLite), якщо потрібно. Також можу додати домашнє завдання у форматі тесту. Що скажеш?