Операторы определения данных в SQL

В стандарте SQL оператор создания таблиц имеет следующий синтаксис:

определение таблицы>::=CREATE TABLE <имя таблицы>(описание элемента таблицы> [{,<описание элемента таблицы>}…])<описание элемента таблицы>::=<определение столбца>определение ограничений таблицы>определение столбца>::=<имя столбца> <тип данных>[<значение по умолчанию>][<дополнительные ограничения столбца>…]<значение по умолчанию>::=DEFAULT { <literal> | USER | NULL } дополнительные ограничения столбца>::=NOT NULL[ограничение уникальности столбца>]ограничение по ссылкам столбца>CHECK (<условия проверки на допустимость>) ограничение уникальности столбца>::= UNIQUE<ограничение по ссылкам столбца>::=FOREIGN KEY <спецификация ссылки> <спецификация ссылки>::= REFERENCES <имя основной таблицы> (<имя первичного ключа основной таблицы>)

Давайте кратко прокомментируем оператор определения таблицы, синтаксис которого мы задали с помощью традиционной формы Бэкуса—Наура.

При описании таблицы задается имя таблицы, которое является идентификатором в базовом языке СУБД и должно соответствовать требованиям именования объектов в данном языке.

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

Оператор CREATE TABLE определяет так называемую базовую таблицу, то есть реальное хранилище данных.

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

В разделе значения по умолчанию указывается значение, которое должно быть помещено в строку, заносимую в данную таблицу, если значение данного столбца явно не указано. В соответствии со стандартом языка SQL значение по умолчанию может быть указано в виде литеральной константы с типом, соответствующим типу столбца; путем задания ключевого слова USER, которому при выполнении оператора занесения строки соответствует символьная строка, содержащая имя текущего пользователя (в этом случае столбец должен иметь тип символьных строк); или путем задания ключевого слова NULL, означающего, что значением по умолчанию является неопределенное значение. Если значение столбца по умолчанию не специфицировано и в разделе ограничений целостности столбца указано NOT NULL (то есть наличие неопределенных значений запрещено), то попытка занести в таблицу строку с незаданным значением данного столбца приведет к ошибке.

Задание в разделе ограничений целостности столбца выражения NOT NULL приводит к неявному порождению проверочного ограничения целостности для всей таблицы "CHECK (C IS NOT NULL)" (где C — имя данного столбца). Если ограничение NOT NULL не указано и раздел умолчаний отсутствует, то неявно порождается раздел умолчаний DEFAULT NULL. Если указана спецификация уникальности, то порождается соответствующая спецификация уникальности для таблицы.

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

Если в разделе ограничений целостности указано ограничение по ссылкам данного столбца, то порождается соответствующее определение ограничения по ссылкам для таблицы: FOREIGN KEY(<имя столбца>) < спецификация ссылки>, что означает, что значения данного столбца должны быть взяты из соответствующего столбца родительской таблицы. Родительской таблицей в данном случае называется таблица, которая связана с данной таблицей связью "один-ко-многим" (1:М). При этом каждая строка родительской таблицы может быть связана с несколькими строками определяемой таблицы. Трансляция операторов SQL проводится в режиме интерпретации, поэтому важно, чтобы сначала была бы описана родительская таблица, а потом уже все подчиненные (дочерние) таблицы, связанные с ней. Иначе транслятор определит ссылку на неопределенный объект.

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

Попробуем написать простейший оператор создания таблицы BOOKS из базы данных "Библиотека".

При этом будем предполагать наличие следующих ограничений целостности:

  • Шифр книги — последовательность символов длиной не более 14, однозначно определяющая книгу, значит, это — фактически первичный ключ таблицы BOOKS.
  • Название книги — последовательность символов, не более 120. Обязательно должно быть задано.
  • Автор — последовательность символов, не более 30, может быть не задан.
  • Соавтор — последовательность символов, не более 30, может быть не задан.
  • Год издания — целое число, не менее 1960 и не более текущего года. По умолчанию ставится текущий год.
  • Издательство — последовательность символов, не более 20, может отсутствовать.
  • Количество страниц — целое число не менее 5 и не более 1000.
CREATE TABLE BOOKS ( ISBN varchar(14) NOT NULL PRIMARY KEY, TITLE varchar(120) NOT NULL, AUTOR varchar(30) NULL, COAUTOR varchar(30) NULL, YEAR_PUBL smallint DEFAULT Year(GetDate()) CHECK(YEAR_PUBL >= 1960 AND YEAR_PUBL <= YEAR(GetDate())), PUBLICH varchar(20) NULL, PAGES smallint CHECK(PAGES > = 5 AND PAGES <= 1000) );

Почему мы не задали обязательность значения для количества страниц в книге? Потому что это является следствием проверочного ограничения, заданного на количество страниц, количество страниц всегда должно лежать в пределах от 5 до 1000, значит, оно не может

Для модификации таблиц используется оператор ALTER TABLE, который позволяет выполнить следующие операции изменения для схемы таблицы:

  • добавить новый столбец в уже существующую и заполненную таблицу;
  • изменить значение по умолчанию для какого-либо столбца;
  • удалить столбец из существующей таблицы;
  • добавить или удалить первичный ключ таблицы;
  • добавить или удалить новый внешний ключ таблицы;
  • добавить или удалить условие уникальности;
  • добавить или удалить условие проверки для любого столбца или для таблицы в целом.

Синтаксис оператора ALTER TABLE:

<Изменить описание таблицы>::= ALTER TABLE <имя таблицы> { ADD определение столбца> ALTER <имя столбца> {SET DEFAULT <значение> DROP DEFAULT } | DROP <имя столбца> {CASCADE | RESTRICT} | ADD { <определение первичного ключа>| <определение внешнего ключа> | <условие уникальности данных> | <условие проверки> } | DROP CONSTRAINT имя условия { CASCADE | RESTRICT} }

Одним оператором ALTER TABLE можно провести только одно из перечисленных изменений, например, за один раз можно добавить один столбец. Если вам требуется добавить два столбца, то необходимо применить два оператора.

Давайте рассмотрим пример. Чаще всего применяется операция добавления столбца. Предложение определения нового столбца в операторе ALTER TABLE имеет точно такой же синтаксис, как и в операторе создания таблицы. Добавим столбец EDUCATION (образование), содержащий символьный тип данных, с заданным перечнем значений ("начальное", "среднее", "неоконченное высшее", "высшее") в таблицу READERS.

ALTER TABLE READERSADD EDUCATION varchar (30) DEFAULT NULLCHECK (EDUCATION IS NULL OR EDUCATION= "начальное" OR EDUCATION= "среднее " OR EDUCATION= "неоконченное высшее" OR EDUCATION= "высшее" )

В таблицу READERS будет добавлен столбец EDUCATION, в который по умолчанию будут добавлены все кортежи неопределенного значения. В дальнейшем эти значения могут быть заменены на одно из допустимых символьных значений.








Дата добавления: 2016-06-24; просмотров: 1494;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.006 сек.