Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Базы данных.doc
Скачиваний:
114
Добавлен:
16.03.2016
Размер:
5.67 Mб
Скачать

15.2. Типы данных sql

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

Все допустимые в SQL типы данных, которые можно использовать при определении столбцов73), разбиваются на следующие категории74):

  • точные числовые типы (exact numerics);

  • приближенные числовые типы (approximate numerics);

  • типы символьных строк (character strings);

72 К сожалению, приходится использовать термин строка в двух смыслах: строка таблицы (table row) и символьная или битовая строка (character or bit string). Постараемся обеспечить правильное понимание смысла термина в контексте его использования.

73 А также переменных, параметров и других типизированных объектов языка SQL, которые мы не затрагиваем в этом курсе.

74 В этот список не включен тип данных XML, поскольку в данном курсе вообще не рассматриваются проблемы управления базами XML-данных.

  • типы битовых строк (bit strings)75);

  • типы даты и времени (datetimes);

  • типы временных интервалов (intervals);

  • булевский тип (Booleans);

  • типы коллекций (collection types);

  • анонимные строчные типы (anonymous row types);

  • типы, определяемые пользователем (user-defined types);

  • ссылочные типы (reference types).

В столбцах таблиц, определенных на любых типах данных, наряду со значениями этих типов, допускается сохранение неопределенного значения, которое обозначается ключевым словомNULL. В языке определено, что результатом выражений видаx a_op NULL,NULL a_op x,NULL a_op NULLявляетсяNULLдля всех арифметических операцийa_op(+,-и т. д.), допустимых для типа данных выраженияx(выражениеNULL a_op NULLявляется допустимым для любой арифметической операцииa_op). Также по определению полагается, что значением выраженийx comp_op NULL,NULL comp_op x,NULL comp_op NULLдля всех операций сравнения (=, ,>,<и т. д.), определенных для типа выраженияx, является третье логическое значениеunknown76)(выражениеNULL comp_op NULLявляется допустимым для любой операции сравненияcomp_op).

15.2.1. Tочные числовые типы

К категории точных числовых типовв SQL относятся те типы, значения которых точно представляют числа. Типы данных этой категории распадаются на две части:истинно целые типы(INTEGERиSMALLINT) итипы, допускающие наличие дробной части(NUMERICиDECIMAL). Охарактеризуем эти типы данных более подробно.

Истинно целые типы

  • Тип INTEGERслужит для представления целых чисел. Точность чисел (число сохраняемых бит) определяется в реализации. При определении столбца данного типа достаточно указать простоINTEGER.

  • ТипSMALLINTтакже служит для представления целых чисел. Точность определяется в реализации, но она не должна быть больше точности типаINTEGER. При определении столбца указывается простоSMALLINT.77)

  • Литералы типов целых чисел представляются в виде строк символов, изображающих десятичные числа; в начале строки могут присутствовать символы «+» или «-» (если символ знака отсутствует, подразумевается «+»). Примеры литералов типовINTEGERиSMALLINT:1826545,876.

75 Спецификация предопределенного типа данных битовых строк была удалена в стандарте SQL:2003. Но поскольку эта спецификация появилась только в SQL:1999, мы сочли уместным оставить в курсе обсуждение этого типа данных.

76 См. ниже Булевский тип.

77 Следует подчеркнуть, что в стандарте SQL не определяется число байт, занимаемых при хранении в памяти значений целых типов. Не следует думать, что в SQL для хранения значения типа INTEGER требуется четыре байта, а SMALLINT требует двух байтов.