1.2.3. Значения по умолчанию в SQL

Бывают случаи, когда необходимо упростить ввод данных со стороны пользователя или просто забивать в какое-либо поле значение, без вмешательства пользователя. Например, вы можете вести таблицу финансовых расходов (например, в программе домашней бухгалтерии). Для этого нужны поля: дата, название и сумма. Если дата не указана, то в поле для хранения даты должна записываться текущая дата. Это очень удобно и позволяет пользователю не вводить дату расходов, сделанных в тот же день, что и занесение информации в таблицу. Указание даты будет необходимо, только если расходы, планируемые на будущий период или сделанные ранее, но не занесены.

Для задания значения по умолчанию, используется ключевое слово DEFAULT, после которого идет нужно значение в том же формате, что и поле. Это значит, что если поле числовое, то значение по умолчанию должно быть числом. Если поле строковое, то значение должно быть строкой заключенной в одинарные кавычки.

Значение по умолчанию не могут быть назначены полям типа timestamp и автоматически увеличиваемым числовым полям. В качестве значения можно указывать конкретное значение, функцию SQL сервера, значения NULL или функции SQL-92 (см. таблицу 1.2). В таблице 1.2 показаны функции SQL-92, но помимо их можно указывать и функции SQL сервера, которых очень много и рассмотреть их в одной таблице или главе просто не возможно.

Таблица 1.2. Функции SQL-92

Название функции Возвращаемое значение
CURRENT_TIMESTAMP Текущая дата и время
CURRENT_USER Имя пользователя, добавившего строку
SESSION_USER Имя пользователя, добавившего строку
SYSTEM_USER Имя пользователя, добавившего строку
USER Имя пользователя, добавившего строку

Давайте создадим таблицу, содержащую три поля:

  • id –целое число со значением по умолчанию = 1;
  • dDate – поле типа дата со значением по умолчанию – текущая дата.
  • vcName - строкового типа со значением по умолчанию 'М'

Все это в виде сценария будет выглядеть следующим образом:

CREATE TABLE TestTable 
(
 id int DEFAULT 1,
 dDate datetime DEFAULT (getdate()),
 vcName varchar(50) DEFAULT 'M'
)

Для поля dDate в качестве значения по умолчанию указывается функция из SQL сервера getdate(). Она возвращает текущую дату. К функциям сервера мы еще вернемся чуть позже и не раз, поэтому пока не заостряйте на этом особого внимания. Если что-то непонятно, все встанет на свои места в 3-й главе.

Если в вашей программе в качестве ключа или для других целей используется глобально уникальный идентификатор GUID, то его значение пользователь уж точно не сможет создать вручную, по крайней мере, создать правильно. Поэтому, вполне логично как-нибудь генерировать его. Например, давайте создадим таблицу из двух полей: идентификатора GUID и названия:

CREATE TABLE TestTable
(
 guid uniqueidentifier DEFAULT NEWID(),
 vcName varchar(50),
)

Первое поле guid в качестве значения по умолчанию будет получать результат выполнения функции NEWID(), которая как раз и генерирует глобально уникальный идентификатор на стороне сервера. Если пользователь не указал значение или клиентская программа не сгенерировала его самостоятельно, то сервер выполнит функцию NEWID() и запишет в поле его значение.

Значения по умолчанию позволяют упростить пользователям жизнь, и не стоит пренебрегать ими. Например, у вас есть таблица жителей города, в которой хранятся ФИО, пол и дата рождения. В поле для хранения пола должно быть написано М или Ж, а так как примерно половина из жителей будет мужчинами, можно упростить пользователю ввод данных. Если пол не указан, то по умолчанию будет в таблице указываться пол М. Таким образом, пол необходимо будет указывать только для женщин.

С другой стороны, из-за значений по умолчанию могут возникнуть ошибки, которые очень сложно определить и исправить. Рассмотрим все тот же пример с полом. А что, если пользователь случайно не укажет пол для женщины? В этом случае, будет указана буква М, и найти запись с неправильным полом будет сложно. Если бы не было никакого значения, то достаточно было бы найти все записи в таблицы с нулевым значением в поле "Пол" и визуально (по имени и фамилии) определить пол и исправить.

Напоследок, необходимо отметить, что значение по умолчанию будет подставляться только при добавлении строки. Если в уже существующей строке таблицы, полю со значением по умолчанию установить нулевое значение, то поле станет равным NULL.

Предыдущая глава

Создание таблиц в Transact-SQL

О блоге

Программист, автор нескольких книг серии глазами хакера и просто блогер. Интересуюсь безопасностью, хотя хакером себя не считаю

Обратная связь

Без проблем вступаю в неразборчивые разговоры по e-mail. Стараюсь отвечать на письма всех читателей вне зависимости от страны проживания, вероисповедания, на русском или английском языке.

Пишите мне