Как сделать значение по умолчанию в sql
Перейти к содержимому

Как сделать значение по умолчанию в sql

  • автор:

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

Для столбца может быть задано значение по умолчанию, т.е. значение, которое будет подставляться в том случае, когда оператор вставки не предоставляет значения для этого столбца. Как правило, значением по умолчанию выбирается наиболее часто встречающееся значение.

Пусть для нашей базы данных наибольшая часть моделей представляет собой ПК. Давайте установим для столбца type значение по умолчанию ‘PC’. Добавить значение по умолчанию можно с помощью оператора ALTER TABLE . Согласно стандарту, оператор для нашего примера имел бы вид:

Однако Cистема управления реляционными базами данных (СУБД), разработанная корпорацией Microsoft. Язык структурированных запросов) — универсальный компьютерный язык, применяемый для создания, модификации и управления данными в реляционных базах данных. SQL Server не поддерживает в данном случае стандартный синтаксис; в диалекте T-SQL аналогичную операцию можно выполнить так:

Теперь при добавлении в таблицу Product модели ПК мы можем не указывать тип.

Заметим, что значением по умолчанию может быть не только литеральная константа, но и функция без параметров. В частности, мы можем использовать функцию CURRENT_TIMESTAMP , возвращающую текущее значение даты-времени. Давайте добавим столбец в таблицу Product, который будет содержать время, соответствующее выполнению операции добавления модели в БД.

Добавим модель 1125 производителя А

и посмотрим на результат

1. Если значение по умолчанию не указано, то подразумевается default NULL, т.е. NULL-значение. Естественно, это значение по умолчанию может быть использовано только в том случае, если на столбце нет ограничения NOT NULL.

2. Если добавить столбец в существующую таблицу, то он, согласно стандарту, будет заполнен значениями по умолчанию для имеющихся строк. В SQL Server поведение при добавлении столбца несколько отличается от стандартного. Если выполнить запрос

который добавляет в таблицу Product столбец available со значением по умолчанию ‘yes’, то, как это ни странно, столбец будет заполнен NULL-значениями. Чтобы «заставить» сервер заполнить столбец значениями ‘yes’, можно использовать один из двух способов:

a). Запретить NULL, т.е. написать такой запрос:

Ясно, что этот способ не годится, если столбец допускает значения NULL.

b). Использовать специальное предложение WITH VALUES :

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.

Как добавить несколько значений по умолчанию в столбец?

Как добавить несколько значений по умолчанию в T-SQL в столбец, и чтобы столбец мог принимать только эти значения?
Например, чтобы значение столбца принимало только ‘Проводной/Лимитный’ , ‘Проводной/безлимитный’ , ‘Беспроводной/Лимитный’ или ‘Беспроводной/Безлимитный’, и только их. Как мне это сделать?

create table [Тарифы всех провайдеров] ( [Название тарифа] varchar(50) primary key, Скорость integer not null, Характеристики varchar(50) default ('Проводной/Лимитный' or 'Проводной/безлимитный' or 'Беспроводной/Лимитный' or 'Беспроводной/Безлимитный') )
  • Вопрос задан более года назад
  • 118 просмотров

Комментировать

Решения вопроса 1

tsklab

Константин Цветков @tsklab Куратор тега SQL Server

Здесь отвечаю на вопросы.

Естественно нормализовать, то есть вынести эти характеристики в отдельную таблицу.

create table [Тарифы всех провайдеров] ( [Название тарифа] varchar(50) primary key, [Скорость] integer not null, [Характеристики] varchar(50) NOT NULL CHECK ( [Характеристики] IN ('Проводной/Лимитный', 'Проводной/безлимитный', 'Беспроводной/Лимитный' , 'Беспроводной/Безлимитный')) )

Ответ написан более года назад

Комментировать

Нравится 1 Комментировать

Как сделать значение по умолчанию в sql

Столбцу можно назначить значение по умолчанию. Когда добавляется новая строка и каким-то её столбцам не присваиваются значения, эти столбцы принимают значения по умолчанию. Также команда управления данными может явно указать, что столбцу должно быть присвоено значение по умолчанию, не зная его. (Подробнее команды управления данными описаны в Главе 6.)

Если значение по умолчанию не объявлено явно, им считается значение NULL. Обычно это имеет смысл, так как можно считать, что NULL представляет неизвестные данные.

В определении таблицы значения по умолчанию указываются после типа данных столбца. Например:

CREATE TABLE products ( product_no integer, name text, price numeric DEFAULT 9.99 );

Значение по умолчанию может быть выражением, которое в этом случае вычисляется в момент присваивания значения по умолчанию (а не когда создаётся таблица). Например, столбцу timestamp в качестве значения по умолчания часто присваивается CURRENT_TIMESTAMP , чтобы в момент добавления строки в нём оказалось текущее время. Ещё один распространённый пример — генерация « последовательных номеров » для всех строк. В Postgres Pro это обычно делается примерно так:

CREATE TABLE products ( product_no integer DEFAULT nextval('products_product_no_seq'), . );

здесь функция nextval() выбирает очередное значение из последовательности (см. Раздел 9.16). Это употребление настолько распространено, что для него есть специальная короткая запись:

CREATE TABLE products ( product_no SERIAL, . );

SERIAL обсуждается позже в Подразделе 8.1.4.

Пред. Наверх След.
5.1. Основы таблиц Начало 5.3. Ограничения

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *