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 'unverified'
);

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

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

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

id name status
1 Peter Pall unverified

Значения по умолчанию для времени

Для таблицы 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 'text'
);

Ошибка: 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.

2
Задача
SQL SELF, 17 уровень, 2 лекция
Недоступна
Создание таблицы с использованием `DEFAULT` для числового значения
Создание таблицы с использованием `DEFAULT` для числового значения
2
Задача
SQL SELF, 17 уровень, 2 лекция
Недоступна
Использование нескольких столбцов с `DEFAULT` значением
Использование нескольких столбцов с `DEFAULT` значением
Комментарии (2)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Анатолий Уровень 53
2 февраля 2026
Постоянно забываю про ';' Не забывайте про него в концу каждого запроса. Ошибка компилятора совсем не понятная... бывает по 5 минут теряешь на то, чтобы понять в чем дело.... а это всего лишь ;
Анатолий Уровень 53
2 февраля 2026
❤️