Программирование >>  Программирование баз данных 

1 ... 50 51 52 [ 53 ] 54 55 56 ... 346


с наличием двух таких разных средств почти с одинаковыми названиями возникает значительная путаница, но автор приложит все свои усилия, чтобы внести ясность (и надеется, что это ему удастся).

Другими шипами конструкций, применяемыми по умолчанию, являются правила и заданные по умолчанию значения, которые описаны ниже в данной главе.

Ограничения DEFAULT, как и все прочие типы ограничений, предусмотрены в синтаксической структуре определения таблицы. Ограничения DEFAULT указывают, какие действия должны быть выполнены, если происходит вставка новой строки, не содержащей данных, соответствующих тому столбцу, к которому относится это ограничение. Вообще говоря, действием обычно является подстановка литерального значения (если в определении ограничения, скажем, задано применяемое по умолчанию значение зарплаты, равное нулю, либо указано значение UNKNOWN для столбца со строковыми данными) или подстановка одного из нескольких значений, формируемых системой, таких как дата, формируемая с помощью функции GETDATE ().

Основные особенности ограничений DEFAULT рассматриваются в приведенном ниже списке.

Значения, подстановка которых должна быть выполнена по умолчанию с помощью конструкции DEFAULT, используются только в операторах INSERT, а в случае их определения в операторах UPDATE и DELETE - игнорируются.

Если в операторе INSERT для столбца с конструкцией DEFAULT задано какое-либо значение, то предусмотренное по умолчанию значение не используется.

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

Следует также отметить, что из правила о том, что при использовании оператора UPDATE не применяются значения, заданные по умолчанию, есть исключение. Такое исключение возникает при явном указании на то, что в операторе обновления должно использоваться значение, заданное по умолчанию. Для подобного указания необходимо ввести ключевое слово DEFAULT в качестве значения, которое должно появиться в обновляемом столбце.

Применение ограничения default в операторе create table

Синтаксическая структура оператора создания таблицы с ограничением DEFAULT во многом напоминает структуру этого оператора со всеми другими ограничениями столбцов, которые рассматривались выше в данной главе. Для ввода в действие ограничения DEFAULT достаточно ввести его в конце определения столбца.

Рассмотрим пример применения ограничения DEFAULT. Для этого необходимо вначале удалить существующую таблицу Shippers, которая была создана ранее в этой главе. На этот раз будет создана более простая версия этой таблицы, включающая значение, применяемое по умолчанию:

CREATE TABLE Shippers (

ShipperlD int IDENTITY NOT NULL

PRIMARY KEY,



ShipperName varchar(30) NOT NULL,

DatelnSystem smalldatetime NOT NULL DEFAULT GETDATE ()

После выполнения сценария с этим оператором CREATE можно снова воспользоваться процедурой sp helpconstraint, чтобы ознакомиться с полученными результатами. После этого для проверки того, как происходит подстановка значения, заданного по умолчанию, выполним вставку новой записи:

INSERT INTO Shippers

(ShipperName) VALUES

(United Parcel Service)

Затем выполним оператор SELECT применительно к таблице Shippers: SELECT * FROM Shippers

Как показано ниже, для столбца DatelnSystem вырабатывается значение, применяемое по умолчанию, поскольку в операторе вставки не было явно задано значение. ShipperlD ShipperName DatelnSystem

1 United Parcel Service 2000-07-13 23:26:00

(1 row(s) affected)

Добавление ограничения default к существующей таблице

Безусловно, констр\тсция DEFAULT, применяемая для добавления ограничения DEFAULT к существующей таблице, остается такой же, как и при создании таблицы, но в самом операторе модификации таблицы имеется небольшой нюанс. Оператор ALTER и конструкция ADD, предназначенная для добавления ограничения, остаются такими же, как и в других описанньгх выше операторах, но дополнительно предусматривается ключевое слово FOR, которое указывает СУБД SQL Server, какой столбец является целевым для ограничения DEFAULT. Пример такого оператора модификации таблицы приведен ниже.

ALTER TABLE Customers

ADD CONSTRAINT CN CustomerDefaultDatelnSystem DEFAULT GETDATE0 FOR DatelnSystem

A следующий пример показывает, как задать литеральное значение в качестве применяемого по умолчанию:

ALTER TABLE Customers

ADD CONSTRAINT CN CustomerAddress DEFAULT UNKNOWN FOR Addressl

В любой таблице может быть задано несколько ограничений DEFAULT, как и всех прочих ограничений, кроме PRIMARY KEY.

В определении таблицы могут применяться любые сочетания описанных выше ограничений. Но при этом необходимо следить за тем, чтобы создаваемые ограничения не содержали взаимоисключающих условий. Например, нельзя допускать, чтобы в одном ограничении было задано условие coll > col2, а в другом- условие со12 > coll. СУБД SQL Server допускает ввод подобных противоречащих друг другу условий, и проблема не обнаруживается до тех пор, пока не наступит этап прогона приложения.



Отмена действия ограничений

Иногда возникает необходимость отменить действие ограничения на время или навсегда. Вполне очевидно, что в СУБД SQL Server должны быть предусмотрены определенные способы удаления ограничений, но эта СУБД позволяет также просто перевести в неактивное состояние ограничение FOREIGN KEY или CHECK, оставив неизменным само определение этого ограничения.

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

Данные, которые уже находились в базе данньгх ко времени создания ограничений.

Данные, которые по какой-то причине необходимо ввести после того, как ограничение уже введено в действие.

Ограничение PRIMARY KEY или UNIQUE отменять нельзя.

Игнорирование неправильных данных при создании ограничения

Синтаксическая структ)а всех операторов, с помощью которых могут быть заданы ограничения, в основном рассчитана на использование в тех обстоятельствах, когда ограничения создаются одновременно с тем, как создается таблица. Тем не менее достаточно часто возникают такие ситуации, что уже после ввода в действие приложения формулируются новые правила работы с данными. Подобное положение дел может быть обусловлено, например, тем, что во время проектирования базы данньгх не бьши учтены какие-то требования, из-за чего, допустим, в таблице Invoicing появились некоторые строки, содержащие отрицательное значение суммы оплаты по счету-фактуре. В связи с этим возникает необходимость добавить правило, не позволяющее вводить в базу данных счета-фактуры с отрицательными значениями суммы, но вместе с тем оставить неизменными существующие строки.

Чтобы ввести в действие новое ограничение, но исключить его применение к су-щесгв)тощим данным, можно включить опцию WITH NOCHECK при подготовке оператора ALTER TABLE, предна.значенного для добавления нового ограничения. Как обычно, рассмотрим применение этой опции на примере.

Таблица Customers, созданная в базе данньгх Accounting, имеет столбец Phone. Столбец Phone был создан с типом данных char, поскольку предполагалось, что все номера телефонов будут иметь одинаковую длину. Кроме того, для столбца Phone было задано значение длины 15, чтобы обеспечить наличие места, достаточного для размещения в поле Phone всех необходимых форматирующих символов. Тем не менее в объявлении таблицы Customers ничего не было предусмотрено для обеспечения того, чтобы строки, вставляемые в таблицу базы данных, действительно соответствовали требуемым критериям форматирования. Чтобы убедиться в этом, вставим



1 ... 50 51 52 [ 53 ] 54 55 56 ... 346

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика