Главная Обратная связь Поможем написать вашу работу!

Дисциплины:

Архитектура (936)
Биология (6393)
География (744)
История (25)
Компьютеры (1497)
Кулинария (2184)
Культура (3938)
Литература (5778)
Математика (5918)
Медицина (9278)
Механика (2776)
Образование (13883)
Политика (26404)
Правоведение (321)
Психология (56518)
Религия (1833)
Социология (23400)
Спорт (2350)
Строительство (17942)
Технология (5741)
Транспорт (14634)
Физика (1043)
Философия (440)
Финансы (17336)
Химия (4931)
Экология (6055)
Экономика (9200)
Электроника (7621)






Основные типы данных языка SQL (без учета объектных расширений). Преобразования типов данных



Все данные, хранящиеся в таблицах, типизированы. Каждому столбцу определяемой таблицы приписывается свой собственный тип. СУБД должна следить за соответствием типов (допустимыми значениями).

Типы данных

Логические типы(TRUE, FALSE, UNKNOWN). В стандарте UNKNOWN и NULL не различаются.

Точные числовые типы (SMALLINT, INTEGER). С дробной частью – NUMERIC (p,s), DECIMAL(p,s). P – число десятичных цифр, s – шкала (число десятичных цифр в дробной части). Для p,s возможны значения по умолчанию. Для NUMERIC р – строгое, для ), DECIMAL – максимально возможное. Пример: 1234,5 – в NUMERIC недопустимо, в ), DECIMAL допустимо.

Приближенные числовые типы(вещественные типы REAL, DOUBLE PRECISION, FLOAT(p)). Параметр р – число значимых цифр в мантиссе.

Символьные строки. CHAR(х) – строки фиксированной длины х (по умолчанию х = 1), VARCHAR – произвольной длины, но не более х (по умолчанию х = 1). CLOB (character large object) – этот тип данных предназначен для определения столбцов, хранящих большие и разные по размеру группы символов. При определении столбца задается спецификация CLOB (z), где z задает максимальный размер соответствующей группы символов. Максимально возможное значение параметра z определяется в реализации, но, очевидно, что оно должно быть существенно больше максимально возможного значения параметра x, присутствующего в типах CHAR и CHAR VARYING (z >> x; если длина меньше х, то справа добавляются пробелы).

Битовые строки(BIT, BIT VARYING(х), BLOB(x)).

Дата и время.DATE : “YYYY-MM-DD”, TIME “HH:MM-SS:FF” (число символов в FF определяется параметром р), TIMESTAMP “YYYY-MM-DD HH:MM-SS:FF”(по умолчанию р = 6, для секунд допустим диапазон 0..61 ), TIME WITH TIME ZONE – +HH:MM, -HH:MM по Гринвичу. Стандартные функции: CURRENT_DATE(_TIME, _STAMP).

Временные интервалы ( INTERVAL ‘start(p)[TO end (q)]’). Р—точность (по умолчанию p = 2), разница не привязана к началу/концу интервала.

( прим. остальных типов в лекциях Маши нет)

Преобразование типов.В SQL поддерживаются явные и неявные преобразования значений одного типа к значениям другого. Неявные (интуитивные) преобразования типов не всегда удобны, недостаточно гибки и иногда могут вызывать ошибки. Поэтому, как показывает предыдущий подраздел, число допустимых неявных преобразований типов в SQL весьма ограничено. Однако в SQL существует специальный оператор CAST, с помощью которого можно явно преобразовывать типы или домены в более широких пределах допускаемых преобразований. Конструкция имеет следующий синтаксис:



CAST ({scalar-expression | NULL } AS {data_type | domain_name})

 

Средства работы с доменами в SQL.

Домен является долговременно хранимым, именованным объектом схемы базы данных. Домены можно создавать (определять), изменять (изменять определения) и ликвидировать (отменять определение). Имена доменов можно использовать при определении столбцов таблиц. Можно считать, что в SQL определение домена представляет собой вынесенное за пределы определения индивидуальной таблицы «родовое» определение столбца, которое можно использовать для определения различных реальных столбцов реальных базовых таблиц.

Определение домена.

Для определения домена в SQL используется оператор CREATE DOMAIN. Общий синтаксис этого оператора следующий:88)

domain_definition ::= CREATE DOMAIN domain_name [AS] data_type [ default_definition ] [ domain_constraint_definition_list ]

Здесь domain_name задает имя создаваемого домена89), data_type есть спецификация определяющего типа данных. В необязательных разделах default_definition и domain_constraint_definition_list специфицируются значение домена по умолчанию90) и набор ограничений целостности, которые будут применяться к любому столбцу, определенному на этом домене.



Раздел default_definition имеет вид

DEFAULT { literal | niladic_function | NULL }91)

Здесь literal представляет любое допустимое литеральное значение определяющего типа домена, NULL обозначает неопределенное значение, а niladic_function может задаваться в одной из следующих форм:

USER

CURRENT_USER

SESSION_USER

SYSTEM_USER

CURRENT_DATE

CURRENT_TIME

CURRENT_TIMESTAMP92)

Если в операторе CREATE DOMAIN значение по умолчанию не специфицируется, считается, что такого значения нет. Однако позже к определению домена можно добавить раздел значения по умолчанию с помощью оператора ALTER DOMAIN. Кроме того, этот оператор позволяет удалить раздел значения по умолчанию из существующего определения домена.

Элемент списка domain_constraint_definition_list имеет вид

[CONSTRAINT constraint_name] CHECK (conditional_expression)

Необязательный раздел CONSTRAINT constraint_name позволяет определить имя нового ограничения целостности. Если явное указание имени отсутствует, ограничению назначается имя, автоматически генерируемое системой. Что касается вида условного выражения, служащего собственно ограничением целостности, то в стандарте запрещается лишь прямое или косвенное использование в нем домена, в определение которого входит данное условное выражение.93) Однако наиболее естественным (и наиболее распространенным) видом ограничения домена является следующий:

CHECK (VALUE IN (list_of_valid_values))

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



Изменение домена.

Для изменения характеристик ранее определенного домена используется оператор SQL ALTER DOMAIN. Синтаксис этого оператора выглядит следующим образом:

domain_alternation ::= ALTER DOMAIN domain_name domain_alternation_actiondomain_alternation_action ::= domain_default_alternation_action | domain_constraint_alternation_action

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

domain_default_alternation_action ::= SET default_definition | DROP DEFAULT

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

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

domain_constraint_alternation_action ::= ADD domain_constraint_definition | DROP CONSTRAINT constraint_name

Действие по добавлению нового определения ограничения домена (ADD) приводит к тому, что новое условие добавляется через AND к существующему ограничению домена. Если к моменту выполнения соответствующего оператора ALTER DOMAIN существуют столбцы некоторых таблиц, текущие значения которых противоречат новому ограничению, то СУБД должна отвергнуть этот оператор ALTER DOMAIN. Действие по отмене ограничения домена (DROP) приводит к исчезновению соответствующей части общего ограничения соответствующего домена, что, естественно, не влияет на существующие значения столбцов имеющихся таблиц.

Отмена домена.

Чтобы отменить ранее созданное определение домена, нужно воспользоваться оператором DROP DOMAIN в следующем синтаксисе:

DROP DOMAIN domain_name {RESTRICT | CASCADES}

 

 


Просмотров 344

Эта страница нарушает авторские права




allrefrs.ru - 2021 год. Все права принадлежат их авторам!