Создание и использование умолчаний, ограничений и правил
Умолчания, ограничения и правила – это необязательные атрибуты, которые можно определять по колонкам и таблицам базы данных. В "Управление таблицами с помощью T-SQL и Enterprise Manager" вы ознакомились с умолчаниями, когда описывалось добавление к таблице колонки со значением по умолчанию с помощью оператора ALTER TABLE. В этой лекции вы узнаете о двух методах создания и модифицирования умолчаний. Напоминаем, что умолчания (значения по умолчанию *) – это значения, которые заносятся в определенную колонку, когда не указано явно никакого значения. Ограничения (constraints)** используются как способ идентифицирования допустимых значений для колонки (чтобы отклонять недопустимые значения) а также как средство обеспечения целостности данных в таблицах базы данных и между связанными таблицами. Мы рассмотрим в этой лекции пять типов ограничений; вы также узнаете, как создавать и модифицировать умолчания и ограничения с помощью Transact-SQL (T-SQL) и Microsoft SQL Server Enterprise Manager, хотя использование Enterprise Manager часто оказывается проще.
Умолчания
Сначала рассмотрим причину, по которой вам может потребоваться использование умолчаний для определенных колонок таблицы; для этого мы посмотрим, что происходит, если вы не задали значение по умолчанию. Если в таблицу вводится строка, содержащая колонки без значений по умолчанию, и не во все колонки, допускающие null -значения, введены конкретные данные, то этим колонкам присваивается значение NULL. Но если колонка определена с атрибутом NOT NULL и вы не ввели какое-либо значение в эту колонку при вводе строки, то будет возвращено сообщение об ошибке, информирующее, что в эту колонку нельзя поместить значение NULL. Именно в этом случае удобно применять умолчания. Умолчания можно использовать, чтобы указывать определенное значение, которое будет помещено вместо значения NULL, и тогда вы не получите сообщения об ошибке. Вам следует использовать умолчания для колонок таблицы вместо разрешения использовать null -значения, поскольку операции по таким колонкам создают более высокую дополнительную нагрузку на систему, чем операции по колонкам, в которых не допускаются null -значения.
Microsoft SQL Server 2000 позволяет вам определять значение по умолчанию для каждой колонки таблицы. Вы не можете задать умолчание для колонок, имеющих тип данных timestamp или обладающих свойством IDENTITY или ROWGUIDCOL, поскольку эти колонки должны иметь уникальные значения. Колонки этого типа несовместимы со значениями по умолчанию, поскольку применение такого значения к колонке более одного раза приводило бы к тому, что колонка уже не имела бы уникальных значений. Вы можете присваивать только одно значение по умолчанию, и оно будет автоматически использоваться каждый раз, когда это требуется. И еще одно важное замечание относительно умолчаний: значение, задаваемое по умолчанию, должно быть совместимо с типом данных соответствующей колонки.
Значение по умолчанию можно создавать и модифицировать несколькими способами. В этом разделе мы рассмотрим, как определять значение по умолчанию при создании таблицы и как модифицировать колонку, чтобы добавлять или изменять умолчание, сначала – с помощью T-SQL и затем – с помощью Enterprise Manager. Напомним, что в "Управление таблицами с помощью T-SQL и Enterprise Manager" мы рассматривали добавление колонок со значением по умолчанию и влияние этого значения на существующие строки. Вы увидите здесь менее подробный пример такой вставки. Мы также рассмотрим возможности и влияние вставки значения по умолчанию в существующую колонку таблицы.
Определение и модифицирование умолчаний с помощью T-SQL
Вы можете определять значение по умолчанию для колонки посредством одного из трех операторов T-SQL: CREATE TABLE, ALTER TABLE или CREATE DEFAULT. Оператор CREATE DEFAULT, который используется в SQL Server 2000 для совместимости с предыдущими версиями, создает объект типа Default (Default-объект). Если вы используете данный метод, SQL Server сохраняет этот объект отдельно от таблицы, поэтому вы должны выполнять привязку этого объекта к колонке или колонкам с помощью системной хранимой процедуры sp_bindefault. Если вы удаляете таблицу, определение DEFAULT автоматически теряет связь с этой таблицей, но сам Default -объект остается. Но если вы используете метод CREATE TABLE или ALTER TABLE, то SQL Server сохраняет определение DEFAULT вместе с таблицей и при удалении таблицы происходит автоматическое удаление этого умолчания без необходимости выполнения дополнительных шагов. По этой причине обычно рекомендуют не использовать оператор CREATE DEFAULT. Однако использование Default -объекта может оказаться полезным, если одно значение по умолчанию будет использоваться для нескольких колонок.
Для запуска ваших операторов T-SQL вам следует использовать анализатор запросов SQL Query Analyzer, поскольку результаты будут появляться в виде графического пользовательского интерфейса (GUI), что проще для чтения, чем при запуске операторов в окне командной строки.
Оператор CREATE TABLE с атрибутом DEFAULT
Создание умолчания для колонки с помощью оператора CREATE TABLE является предпочтительным, стандартным методом. Следующий оператор создает в базе данных MyDB таблицу, содержащую умолчания для обеих колонок, – columnA (типа char) и columnB (типа int):
USE MyDB CREATE TABLE MyTable ( columnA char(15) NULL DEFAULT 'n/a', columnB int NULL DEFAULT 0 ) GO
Значение по умолчанию n/a (сокращение от not applicable – неприменимо) для колонки columnA совместимо с типом данных char этой колонки, и значение по умолчанию 0 для колонки columnB совместимо с типом данных int . Если при вставке новой строки в таблицу не указывается конкретное значение для одной или обеих колонок, то используется соответствующее значение по умолчанию. Поэтому единственным способом присваивания этим колонкам значения NULL является явная вставка NULL. Null -значения допустимы, поскольку для обеих колонок указан атрибут NULL. Если бы колонки были определены как NOT NULL, то вы не могли бы выполнять явную вставку значения NULL.