Інколи нам не хочеться заповнювати всі поля вручну — ну, лінь або просто немає потрібних даних. У таких випадках можна заздалегідь задати значення за замовчуванням, щоб база сама підставила їх, коли треба.
Вставка рядків у таблицю
Значення за замовчуванням тісно пов’язані зі вставкою рядків у таблицю. Тому зараз я коротко розкажу про це, а через пару рівнів ми ще повернемося до цієї теми й приділимо їй стільки уваги, скільки вона заслуговує.
Додавати рядки в таблицю дуже просто — для цього є спеціальна команда 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 | |
|---|---|---|
| 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 | |
|---|---|---|
| 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.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ