JavaRush /Курси /SQL SELF /Використання DEFAULT для значень за замовчу...

Використання DEFAULT для значень за замовчуванням

SQL SELF
Рівень 17 , Лекція 2
Відкрита

Інколи нам не хочеться заповнювати всі поля вручну — ну, лінь або просто немає потрібних даних. У таких випадках можна заздалегідь задати значення за замовчуванням, щоб база сама підставила їх, коли треба.

Вставка рядків у таблицю

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

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

Синтаксис команди

INSERT INTO таблиця (колонка1, колонка2, ...)
VALUES (значення1, значення2, ...);

Пояснення:

  • таблиця — ім’я таблиці, у яку додаються дані.
  • колонка1, колонка2, ... — перелік стовпців (можна опустити, якщо значення йдуть у всіх стовпцях у правильному порядку).
  • значення1, значення2, ... — значення, що відповідають переліченим стовпцям.

Простий приклад

INSERT INTO users (name, email)
VALUES ('Alice', 'alice@example.com');

Додає в таблицю users один рядок: ім’я — "Alice", email — "alice@example.com".

Результат:

id name email
1 Alice alice@example.com

Вставка кількох рядків за раз

Також можна вставити кілька записів за один запит — швидше й економніше.

INSERT INTO users (name, email)
VALUES 
  ('Alice', 'alice@example.com'),
  ('Bob', 'bob@example.net'),
  ('Charlie', 'charlie@example.org'),
  ('Diana', 'diana@example.com'),
  ('Eve', 'eve@example.net');

І ось який буде результат:

id name email
1 Alice alice@example.com
2 Bob bob@example.net
3 Charlie charlie@example.org
4 Diana diana@example.com
5 Eve eve@example.net

Значення за замовчуванням

Пам’ятаєш синтаксис команди для додавання рядків?

INSERT INTO таблиця (колонка1, колонка2, ...)
VALUES (значення1, значення2, ...);

Як думаєш, навіщо там список колонок: колонка1, колонка2? Адже можна ж просто вказати значення в тому ж порядку, що й колонки таблиці.

Справа в тому, що дуже багато значень можна не вказувати при додаванні даних. Наприклад, ID нового рядка PostgreSQL порахує сам при додаванні. Так само він може сам визначити поточну дату/час додавання рядка й внести її у відповідну колонку. Якщо якісь дані не були передані, то PostgreSQL замінить їх на NULL.

PostgreSQL може зробити за тебе багато всього корисного. І ти можеш керувати цим процесом — для цього й існують значення за замовчуванням, які задаються за допомогою ключового слова DEFAULT.

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

Як працює DEFAULT?

Давай розберемося з синтаксисом. Значення за замовчуванням задаються на етапі створення таблиці. Ось загальний формат використання:

CREATE TABLE таблиця (
    колонка тип_даних DEFAULT значення_за_замовчуванням
);

Або, якщо тобі треба додати значення за замовчуванням для вже існуючої таблиці:

ALTER TABLE таблиця
ALTER COLUMN колонка
SET DEFAULT значення_за_замовчуванням;

Детальніше я розповім про зміну таблиць буквально через пару лекцій :P

Приклад 1: Таблиця з полем DEFAULT

Створимо таблицю students, у якій кожен студент буде автоматично отримувати дату реєстрації:

CREATE TABLE students (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    registration_date DATE DEFAULT CURRENT_DATE
);

Тепер, коли ти додаєш нового студента без вказання registration_date, PostgreSQL автоматично заповнить це поле поточною датою.

INSERT INTO students (name) VALUES ('Alex Lin');

При запиті:

SELECT * FROM students;

Ти отримаєш такий результат:

id name registration_date
1 Alex Lin 2023-10-15

Практичні приклади

Значення за замовчуванням для числового стовпця

Припустимо, у нас є таблиця grades, де в стовпці grade має бути значення за замовчуванням 0, якщо оцінку ще не виставлено.

CREATE TABLE grades (
    id SERIAL PRIMARY KEY,
    student_id INTEGER NOT NULL,
    course_id INTEGER NOT NULL,
    grade INTEGER DEFAULT 0
);

Додаємо запис без вказання grade:

INSERT INTO grades (student_id, course_id) VALUES (1, 101);

Тепер таблиця виглядатиме так:

id student_id course_id grade
1 1 101 0

Використання TEXT зі значенням за замовчуванням

Уяви таблицю teachers, де кожному викладачу автоматично присвоюється статус «не підтверджено» при додаванні.

CREATE TABLE teachers (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    status TEXT DEFAULT 'не підтверджено'
);

Додаємо викладача без вказання статусу:

INSERT INTO teachers (name) VALUES ('Peter Pall');

Результат буде таким:

id name status
1 Peter Pall не підтверджено

Значення за замовчуванням для часу

Для таблиці meetings, у якій зберігаються дані про зустрічі, можна задати поле meeting_time, що вказує стандартний час початку: 10:00 ранку.

CREATE TABLE meetings (
    id SERIAL PRIMARY KEY,
    topic VARCHAR(100),
    meeting_time TIME DEFAULT '10:00'
);

Додаємо запис:

INSERT INTO meetings (topic) VALUES ('Обговорення проекту');

Результат:

id topic meeting_time
1 Обговорення проекту 10:00

Типові помилки при використанні DEFAULT

Невідповідність типу даних значенню за замовчуванням. Якщо ти намагаєшся задати текстове значення для числового стовпця, PostgreSQL буде сваритися:

CREATE TABLE example (
    number INTEGER DEFAULT 'текст'
);

Помилка: invalid input syntax for type integer.

Зміна DEFAULT без урахування існуючих записів. Коли ти змінюєш значення за замовчуванням, це не впливає на вже додані записи — вони залишають стару поведінку. Якщо хочеш оновити існуючі рядки, використовуй UPDATE.

UPDATE students SET registration_date = '2023-01-01' WHERE registration_date IS NULL;

Плутанина між DEFAULT і NOT NULL. Значення за замовчуванням не означає, що поле автоматично стає обов’язковим (NOT NULL). Без явного вказання NOT NULL стовпець може приймати значення NULL.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ