Значения по умолчанию
Для столбца может быть задано значение по умолчанию, т.е. значение, которое будет подставляться в том случае, когда оператор вставки не предоставляет значения для этого столбца. Как правило, значением по умолчанию выбирается наиболее часто встречающееся значение.
Пусть для нашей базы данных наибольшая часть моделей представляет собой ПК. Давайте установим для столбца type значение по умолчанию ‘PC’. Добавить значение по умолчанию можно с помощью оператора ALTER TABLE . Согласно стандарту, оператор для нашего примера имел бы вид:
Однако />Cистема управления реляционными базами данных (СУБД), разработанная корпорацией Microsoft. />Язык структурированных запросов) — универсальный компьютерный язык, применяемый для создания, модификации и управления данными в реляционных базах данных. SQL Server не поддерживает в данном случае стандартный синтаксис; в диалекте T-SQL аналогичную операцию можно выполнить так:
Теперь при добавлении в таблицу Product модели ПК мы можем не указывать тип.
Заметим, что значением по умолчанию может быть не только литеральная константа, но и функция без параметров. В частности, мы можем использовать функцию CURRENT_TIMESTAMP , возвращающую текущее значение даты-времени. Давайте добавим столбец в таблицу Product, который будет содержать время, соответствующее выполнению операции добавления модели в БД.
Добавим модель 1125 производителя А
1. Если значение по умолчанию не указано, то подразумевается default NULL, т.е. NULL-значение. Естественно, это значение по умолчанию может быть использовано только в том случае, если на столбце нет ограничения NOT NULL.
2. Если добавить столбец в существующую таблицу, то он, согласно стандарту, будет заполнен значениями по умолчанию для имеющихся строк. В SQL Server поведение при добавлении столбца несколько отличается от стандартного. Если выполнить запрос
Как по умолчанию определить переменную в sql
С помощью атрибутов можно настроить поведение столбцов. Рассмотрим, какие атрибуты мы можем использовать.
PRIMARY KEY
Атрибут PRIMARY KEY задает первичный ключ таблицы.
Первичный ключ уникально идентифицирует строку в таблице. В качестве первичного ключа необязательно должны выступать столбцы с типом int, они могут представлять любой другой тип.
Установка первичного ключа на уровне таблицы:
Первичный ключ может быть составным. Такой ключ использовать сразу несколько столбцов, чтобы уникально идентифицировать строку в таблице. Например:
Здесь поля OrderId и ProductId вместе выступают как составной первичный ключ. То есть в таблице OrderLines не может быть двух строк, где для обоих из этих полей одновременно были бы одни и те же значения.
AUTO_INCREMENT
Атрибут AUTO_INCREMENT позволяет указать, что значение столбца будет автоматически увеличиваться при добавлении новой строки. Данный атрибут работает для столбцов, которые представляют целочисленный тип или числа с плавающей точкой.
В данном случае значение столбца Id каждой новой добавленной строки будет увеличиваться на единицу.
UNIQUE
Атрибут UNIQUE указывает, что столбец может хранить только уникальные значения.
В данном случае столбец Phone, который представляет телефон клиента, может хранить только уникальные значения. И мы не сможем добавить в таблицу две строки, у которых значения для этого столбца будет совпадать.
Также мы можем определить этот атрибут на уровне таблицы:
NULL и NOT NULL
Чтобы указать, может ли столбец принимать значение NULL , при определении столбца ему можно задать атрибут NULL или NOT NULL . Если этот атрибут явным образом не будет использован, то по умолчанию столбец будет допускать значение NULL. Исключением является тот случай, когда столбец выступает в роли первичного ключа — в этом случае по умолчанию столбец имеет значение NOT NULL.
В данном случае столбец Age по умолчанию будет иметь атрибут NULL.
DEFAULT
Атрибут DEFAULT определяет значение по умолчанию для столбца. Если при добавлении данных для столбца не будет предусмотрено значение, то для него будет использоваться значение по умолчанию.
Здесь столбец Age в качестве значения по умолчанию имеет число 18.
CHECK
Атрибут CHECK задает ограничение для диапазона значений, которые могут храниться в столбце. Для этого после CHECK указывается в скобках условие, которому должен соответствовать столбец или несколько столбцов. Например, возраст клиентов не может быть меньше 0 или больше 100:
Кроме проверки возраста здесь также проверяется, что столбцы Email и Phone не могут иметь пустую строку в качестве значения (пустая строка не эквивалентна значению NULL).
Для соединения условий используется ключевое слово AND . Условия можно задать в виде операций сравнения больше (>), меньше (<), не равно (!=).
Также CHECK можно использовать на уровне таблицы:
Оператор CONSTRAINT. Установка имени ограничений
С помощью ключевого слова CONSTRAINT можно задать имя для ограничений. Они указываются после ключевого слова CONSTRAINT перед атрибутами на уровне таблицы:
В данном случае ограничение для PRIMARY KEY называется customers_pk, для UNIQUE — customer_phone_uq, а для CHECK — customer_age_chk. Смысл установки имен ограничений заключается в том, что впоследствии через эти имена мы сможем управлять ограничениями — удалять или изменять их.
Установить имя можно для ограничений PRIMARY KEY, CHECK, UNIQUE, а также FOREIGN KEY, который рассматриватся далее.
Column check, default, enum, set
При создании или изменении таблицы можно использовать ограничение на значение поля записи. СУБД проигнорирует любые значения, которые нарушают определенные для поля записи критерии.
По умолчанию создаваемое в таблице поле может иметь пустое значение NULL. Чтобы поле имело какое-нибудь значение, необходимо в описание поля вставить ограничение на значение NOT NULL. В этом случае при вставке или обновлении записи СУБД проверит значения и отклонит запись при неопределенности значения.
Очевидно, что первичные ключи никогда не должны быть пустыми. СУБД не позволит создать таблицу с первичным ключом, у которого одно или несколько полей могут иметь пустое значение.
Ограничение по значению, CHECK
Оператор sql check обеспечивает ограничение по значению, которое определяет условие, которому должно удовлетворять значение поля, вводимое в таблицу. Любая попытка модифицировать или вставить в поле значение, которое могло бы нарушить условие ограничения, будет отклонена.
Имеется два основных типа ограничений check — ограничение столбца и ограничение таблицы. Различие между ними состоит в том, что ограничение столбца применяется только к индивидуальным столбцам, в то время как ограничение таблицы может применяться к группам из одного и более столбцов. Ограничение таблицы размещается после определения всех полей. Ограничение на значение столбца размещается после определения типа данных и перед запятой.
Синтаксис "check sql syntax"
Синтаксис ограничения по значению "check sql syntax" имеет следующий вид :
В представленном примере таблица кандидатов на вакантную должность включает ограничения значений для 2-х полей и одно ограничение на таблицу. Именнованное ограничение на таблицу "chkExperiencePost" создано оператором CONSTRAINT. Условие размещения записи в таблице — возраст кандидата в пределах 25. 35 лет с опытом работы в должности менеджера не менее 3-х лет.
В MySQL оператор sql check не используется. Необходимо использовать операторы enum или set.
Значение поля по умолчанию, default value
Можно при определении поля таблицы указать значение по умолчанию. Например, для поля "пол сотрудника" можно определить значение по умолчанию ("sql default value"). При определении значения по умолчанию можно использовать функции СУБД. Как правило это широко используется при определении значения даты записи.
Функции работы с временем для разных СУБД могут отличаться. Смотрите документацию.
Тип перечисления, MySQL ENUM
Тип перечисления enum используется при определении поля таблицы в MySQL и ограничивает его значения списком допустимых enum values, явно перечисленных в определении столбца в момент создания таблицы.
Синтакис ENUM
Значением enum также может быть пустая строка ("") или NULL при определенных условиях :
- если в поле вставляется некорректное значение в столбец с типом enum, то будет вставлена пустая строка, что является указанием на ошибочное значение. Эта строка отличается от "обычной" пустой строки по тому признаку, что она имеет цифровое значение, равное 0.
- если поле с типом enum определено как NULL, то тогда NULL также является допустимым значением столбца и значение по умолчанию будет NULL. Если enum определяется как NOT NULL, то значением по умолчанию является первый элемент из списка допустимых значений.
Каждое значение перечисления enum имеет индекс :
- все значения из списка допустимых элементов enum values в спецификации столбца пронумерованы, начиная с 1;
- индексом значения NULL является само NULL;
- индексное значение пустого значения является значенияе 0.
Можно использовать следующий SQL запрос, чтобы найти строки, в которых были установлены недопустимые для enum значения :
Например, столбец, определенный как enum ("один", "два", "три"), может иметь любое из перечисленных в таблице значений.
| Значение | Индекс |
|---|---|
| NULL | NULL |
| «» | 0 |
| «один» | 1 |
| «два» | 2 |
| «три» | 3 |
Регистр не играет никакой роли при присвоении значения столбцу enum. Так например, если при определении столбца было задано значение «Школа», а при присвоении значения полю в таблице было использовано «ШКОЛА». Сервер все равно выдаст значение именно «Школа».
Списочный тип, MySQL SET
Значение поля списочного типа mysql set может быть составлено из разделенных запятыми подстрок, каждая из которых должна быть выбрана из списка допустимых значений, определенных при создании таблицы. Элементы множества "set" разделяются запятыми. Поэтому сами элементы множества "set value" не могут содержать запятых.
Хранится тип set как число (1, 2, 3, 4 или 8 байт), а точнее — как битовая карта (до 64 бит), где порядковый номер бита соответствует порядковому номеру строки в описании столбца, а значение бита управляет вхождением ассоциированной строки в результирующий CSV-список. Работать с этим типом можно как с числом, как с битовой картой или как со строкой (списком).
Синтакис mysql set
Например, столбец, определенный как SET("один", "два") NOT NULL может принимать следующие значения :
- ""
- "один"
- "два"
- "один,два"
Множество SET может иметь максимум 64 различных элемента.
Небольшой пример set :
В примере наглядно видно соответствие бит и строк. К сожалению, битовых индексов MySQL не имеет и ниже приведенные операции приводят к полному просмотру всех строк таблицы.
И только равенство позволяет использовать индекс. Индексировать столбец SET можно, но бессмысленно.
Ограничение DEFAULT в SQL
Ограничение DEFAULT используется для установки значений по умолчанию при попытке вставить пустое ( NULL ) значение в столбец. Например:
Здесь значением по умолчанию для столбца college_country является Japan .
Если мы попытаемся сохранить значение NULL в столбце college_country, то значением станет Japan . Например:
Ограничение DEFAULT с ALTER TABLE
Мы также можем добавить ограничение DEFAULT к существующему столбцу с помощью оператора ALTER TABLE. Например:
SQL Server
PostgreSQL
MySQL
Oracle
Здесь значением по умолчанию для столбца college_country является Japan , если кто-то попытается вставить NULL .
Удалить ограничение DEFAULT
Мы можем удалить ограничение DEFAULT , используя оператор DROP . Например: