loading..
Русский    English
23:31
листать

Проверочные ограничения

Проверочное  ограничение имеет вид:

  1. CHECK (<предикат>)

Предикат может принимать значения TRUE, FALSE или UNKNOWN. Предикат считается нарушенным, когда он принимает значение FALSE; при этом действие, которое привело к нарушению предиката, не выполняется, и генерируется сообщение об ошибке.

Вернемся к нашей проблеме, а именно вставке строки (NULL,    '2000',    NULL) в таблицу Product. Понятно, что подобных строк следует избегать, т.к. неизвестно, чем является модель 2000 и каким производителем она выпускается.  Мы можем использовать предикат IS NOT NULL в проверочных ограничениях для столбцов maker и type:

  1. DROP TABLE Product;
  2. CREATE TABLE Product (
  3. maker varchar(10),
  4. model varchar(50),
  5. type varchar(50),
  6. CONSTRAINT product_PK PRIMARY KEY (model),
  7. CONSTRAINT maker_ch CHECK(maker IS NOT NULL),
  8. CONSTRAINT type_ch CHECK(type IS NOT NULL)
  9. );

Теперь при попытке вставить строку (NULL,    '2000',    NULL) мы получим сообщение об ошибке:

Cannot insert the value NULL into column 'model', table 'Product'; column does not allow nulls. INSERT fails.

(Значение NULL не может быть вставлено в столбец model таблицы Product; столбец не допускает NULL-значений. INSERT не выполнен)

И строка вставлена не будет, вернее, будет отклонен весь оператор INSERT.

Заметим, что ограничение NOT NULL (как и PRIMARY KEY для простого ключа) может быть записано непосредственно в определение столбца:

  1. DROP TABLE Product;
  2. CREATE TABLE Product (
  3. maker varchar(10) NOT NULL,
  4. model varchar(50) PRIMARY KEY,
  5. type varchar(50) NOT NULL
  6. );

Более того, любое ограничение уровня столбца можно записать непосредственно в определении столбца.
Ниже приводится пример, добавляющий новый столбец (available) в таблицу Product:

  1. ALTER TABLE Product ADD available VARCHAR(20) DEFAULT 'Yes';

Чтобы ограничить допустимые значения в данном столбце значениями 'Yes' и 'No', этот оператор можно было бы переписать в виде:

  1. ALTER TABLE Product ADD available VARCHAR(20)
  2. CHECK(available IN('Yes','No')) DEFAULT 'Yes';



Bookmark and Share
Тэги:
ALL AND AUTO_INCREMENT AVG battles CASE CAST CHAR CHARINDEX CHECK classes COALESCE CONSTRAINT Convert COUNT CROSS APPLY CTE DATEADD DATEDIFF DATENAME DATEPART DATETIME DDL DEFAULT DELETE DISTINCT DML EXCEPT EXISTS EXTRACT FOREIGN KEY FROM FULL JOIN GROUP BY Guadalcanal HAVING IDENTITY IN INNER JOIN insert INTERSECT IS NOT NULL ISNULL laptop LEFT LEFT OUTER JOIN LEN maker MAX MIN Больше тэгов
Учебник обновлялся
несколько дней назад
©SQL-EX,2008 [Развитие] [Связь] [О проекте] [Ссылки] [Team]
Перепечатка материалов сайта возможна только с разрешения автора.
Rambler's Top100