Контакты

Числовые типы данных в sql. Стандартные Типы данных SQL

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

Типы данных SQL строковые

Типы данных SQL Описание
CHAR(size) Строки фиксированной длиной (могут содержать буквы, цифры и специальные символы). Фиксированный размер указан в скобках. Можно записать до 255 символов
VARCHAR(size)
TINYTEXT Может хранить не более 255 символов.
TEXT
BLOB Может хранить не более 65 535 символов.
MEDIUMTEXT
MEDIUMBLOB Может хранить не более 16 777 215 символов.
LONGTEXT
LONGBLOB Может хранить не более 4 294 967 295 символов.
ENUM(x,y,z,etc.) Позволяет вводить список допустимых значений. Можно ввести до 65535 значений вSQL Тип данных ENUM список. Если при вставке значения не будет присутствовать в списке ENUM , то мы получим пустое значение. Ввести возможные значения можно в таком формате: ENUM ("X", "Y", "Z")
SET SQL Тип данных SET напоминает ENUM за исключением того, что SET может содержать до 64 значений.

Типы данных SQL с плавающей точкой (дробные числа) и целые числа

Типы данных SQL - Дата и время

Создание таблицы в базе данных производится командой CREATE TABLE .

Синтаксис:

CREATE TABLE tbl_name [(create_definition,...)]

tbl_name - Задает имя таблицы, которая будет создана в текущей базе данных. Если никакая база данных на момен вызова команды CREATE TABLE не была принята текущей, то возникнет ошибка выполнения команды.

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

create_definition - Определяет внутреннюю структуру создаваемой таблицы (названия и типы полей, ключи, индексы и т.д.)

Возможные синтаксисы create_definition :

col_name type

PRIMARY KEY (index_col_name,...)

KEY (index_col_name,...)

INDEX (index_col_name,...)

UNIQUE (index_col_name,...)

FOREIGN KEY (index_col_name,...)

col_name - Задает имя столбца в создаваемой таблице.

Type - Задает тип данных для столбца col_name .

Возможные значения параметра type :

§ INT[(length)]

§ BIGINT[(length)]

§ DOUBLE[(length,decimals)]

§ FLOAT[(length,decimals)]

§ DECIMAL(length,decimals)

§ CHAR(length)

§ VARCHAR(length)

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

- Задает значение по умолчанию для данного столбца. При вставке новой записи в таблицу командой INSERT если значение для поля col_name явно указано не было, то устанавливается значение default_value .

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

Следующий пример создает таблицу users с 3 полями, где первое поле - уникальный идентификатор записи, второе поле - имя пользователя, а третье поле - его возраст:

create table Water_Area(

id int auto_increment,

name varchar(70),

constraint pk_Water_Area primary key nonclustered(id))

create table Station(

id_Water_Area int not null,

name varchar(20) not null,

Latitude float(4) null,

Longitude float(4) null,

coordinates varchar(40) null,

coordinates_modern varchar(30) null,

comment varchar(70) null

constraint pk_Station primary key nonclustered(id))

Удаление таблицы.

Для удаления таблицы служит команда DROP TABLE.

DROP TABLE tbl_name [, tbl_name,...]

tbl_name - Имя удаляемой таблицы.

IF EXISTS – Если указан этот параметр, то при попытке удаления несущестующей таблицы ошибки не возникнет. В противном случае возникнет ошибка выполнения команды.

RESTRICT и CASCADE Не несут никакой функциональности. Оставлены для упрощения переноса программы.

Drop table Station

Модификация таблиц.

Для модификации служит команда Alter Table.

Синтаксис:

ALTER TABLE TableName1ADD | ALTER FieldName1FieldType [(nFieldWidth [, nPrecision])] ]] | FieldName]

Команда ALTER TABLE изменяет определение таблицы одним из следующих способов:

Добавляет столбец

Добавляет ограничение целостности

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

Удаляет столбец

Модифицирует характеристики памяти или иные параметры

Включает, выключает или удаляет ограничение целостности или триггер.

alter table Station

unique(id_Water_Area, name)

alter table Station

add constraint fk_Station_Relation_Water_Area foreign key (id_Water_Area) references Water_Area (id)

Последнее обновление: 12.07.2017

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

Язык T-SQL предоставляет множество различных типов. В зависимости от характера значений все их можно разделить на группы.

Числовые типы данных

    BIT : хранит значение 0 или 1. Фактически является аналогом булевого типа в языках программирования. Занимает 1 байт.

    TINYINT : хранит числа от 0 до 255. Занимает 1 байт. Хорошо подходит для хранения небольших чисел.

    SMALLINT : хранит числа от –32 768 до 32 767. Занимает 2 байта

    INT : хранит числа от –2 147 483 648 до 2 147 483 647. Занимает 4 байта. Наиболее используемый тип для хранения чисел.

    BIGINT : хранит очень большие числа от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807, которые занимают в памяти 8 байт.

    DECIMAL : хранит числа c фиксированной точностью. Занимает от 5 до 17 байт в зависимости от количества чисел после запятой.

    Данный тип может принимать два параметра precision и scale: DECIMAL(precision, scale) .

    Параметр precision представляет максимальное количество цифр, которые может хранить число. Это значение должно находиться в диапазоне от 1 до 38. По умолчанию оно равно 18.

    Параметр scale представляет максимальное количество цифр, которые может содержать число после запятой. Это значение должно находиться в диапазоне от 0 до значения параметра precision. По умолчанию оно равно 0.

    NUMERIC : данный тип аналогичен типу DECIMAL.

    SMALLMONEY : хранит дробные значения от -214 748.3648 до 214 748.3647. Предназначено для хранения денежных величин. Занимает 4 байта. Эквивалентен типу DECIMAL(10,4) .

    MONEY : хранит дробные значения от -922 337 203 685 477.5808 до 922 337 203 685 477.5807. Представляет денежные величины и занимает 8 байт. Эквивалентен типу DECIMAL(19,4) .

    FLOAT : хранит числа от –1.79E+308 до 1.79E+308. Занимает от 4 до 8 байт в зависимости от дробной части.

    Может иметь форму опредеения в виде FLOAT(n) , где n представляет число бит, которые используются для хранения десятичной части числа (мантиссы). По умолчанию n = 53.

    REAL : хранит числа от –340E+38 to 3.40E+38. Занимает 4 байта. Эквивалентен типу FLOAT(24) .

Примеры числовых столбцов: Salary MONEY, TotalWeight DECIMAL(9,2), Age INT, Surplus FLOAT

Типы данных, представляющие дату и время

    DATE : хранит даты от 0001-01-01 (1 января 0001 года) до 9999-12-31 (31 декабря 9999 года). Занимает 3 байта.

    TIME : хранит время в диапазоне от 00:00:00.0000000 до 23:59:59.9999999. Занимает от 3 до 5 байт.

    Может иметь форму TIME(n) , где n представляет количество цифр от 0 до 7 в дробной части секунд.

    DATETIME : хранит даты и время от 01/01/1753 до 31/12/9999. Занимает 8 байт.

    DATETIME2 : хранит даты и время в диапазоне от 01/01/0001 00:00:00.0000000 до 31/12/9999 23:59:59.9999999. Занимает от 6 до 8 байт в зависимости от точности времени.

    Может иметь форму DATETIME2(n) , где n представляет количество цифр от 0 до 7 в дробной части секунд.

    SMALLDATETIME : хранит даты и время в диапазоне от 01/01/1900 до 06/06/2079, то есть ближайшие даты. Занимает от 4 байта.

    DATETIMEOFFSET : хранит даты и время в диапазоне от 0001-01-01 до 9999-12-31. Сохраняет детальную информацию о времени с точностью до 100 наносекунд. Занимает 10 байт.

Распространенные форматы дат:

    yyyy-mm-dd - 2017-07-12

    dd/mm/yyyy - 12/07/2017

    mm-dd-yy - 07-12-17

    В таком формате двузначные числа от 00 до 49 воспринимаются как даты в диапазоне 2000-2049. А числа от 50 до 90 как диапазон чисел 1950 - 1999.

    Month dd, yyyy - July 12, 2017

Распространенные форматы времени:

  • hh:mi am/pm - 1:21 pm

    hh:mi:ss - 1:21:34

    hh:mi:ss:mmm - 1:21:34:12

    hh:mi:ss:nnnnnnn - 1:21:34:1234567

Строковые типы данных

    CHAR : хранит строку длиной от 1 до 8 000 символов. На каждый символ выделяет по 1 байту. Не подходит для многих языков, так как хранит символы не в кодировке Unicode.

    Количество символов, которое может хранить столбец, передается в скобках. Например, для столбца с типом CHAR(10) будет выделено 10 байт. И если мы сохраним в столбце строку менее 10 символов, то она будет дополнена пробелами.

    VARCHAR : хранит строку. На каждый символ выделяется 1 байт. Можно указать конкретную длину для столбца - от 1 до 8 000 символов, например, VARCHAR(10) . Если строка должна иметь больше 8000 символов, то задается размер MAX, а на хранение строки может выделяться до 2 Гб: VARCHAR(MAX) .

    Не подходит для многих языков, так как хранит символы не в кодировке Unicode.

    В отличие от типа CHAR если в столбец с типом VARCHAR(10) будет сохранена строка в 5 символов, то в столце будет сохранено именно пять символов.

    NCHAR : хранит строку в кодировке Unicode длиной от 1 до 4 000 символов. На каждый символ выделяется 2 байта. Например, NCHAR(15)

    NVARCHAR : хранит строку в кодировке Unicode. На каждый символ выделяется 2 байта.Можно задать конкретный размер от 1 до 4 000 символов: . Если строка должна иметь больше 4000 символов, то задается размер MAX, а на хранение строки может выделяться до 2 Гб.

Еще два типа TEXT и NTEXT являются устаревшими и поэтому их не рекомендуется использовать. Вместо них применяются VARCHAR и NVARCHAR соответственно.

Примеры определения строковых столбцов:

Email VARCHAR(30), Comment NVARCHAR(MAX)

Бинарные типы данных

    BINARY : хранит бинарные данные в виде последовательности от 1 до 8 000 байт.

    VARBINARY : хранит бинарные данные в виде последовательности от 1 до 8 000 байт, либо до 2^31–1 байт при использовании значения MAX (VARBINARY(MAX)).

Еще один бинарный тип - тип IMAGE является устаревшим, и вместо него рекомендуется применять тип VARBINARY.

Остальные типы данных

    UNIQUEIDENTIFIER : уникальный идентификатор GUID (по сути строка с уникальным значением), который занимает 16 байт.

    TIMESTAMP : некоторое число, которое хранит номер версии строки в таблице. Занимает 8 байт.

    CURSOR : представляет набор строк.

    HIERARCHYID : представляет позицию в иерархии.

    SQL_VARIANT : может хранить данные любого другого типа данных T-SQL.

    XML : хранит документы XML или фрагменты документов XML. Занимает в памяти до 2 Гб.

    TABLE : представляет определение таблицы.

    GEOGRAPHY : хранит географические данные, такие как широта и долгота.

    GEOMETRY : хранит координаты местонахождения на плоскости.

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

2.3.1 Типы char и varchar.

Являются символьными типами данных фиксированной или переменной длины.

char [ (n) ] - символьные данные фиксированной длины, не в Юникоде, с длиной n байт. Значение n должно находиться в интервале от 1 до 8000. Размер хранения данных этого типа равен n байт. Синонимом по стандарту ISO для типа char является character.

varchar [ (n | max) ] - символьные данные переменной длины, не в Юникоде; n может иметь значение от 1 до 8 000; max означает, что максимальный размер хранения равен 2^31-1 байт. Размер хранения равен фактической длине данных плюс два байта. Введенные данные могут иметь длину 0 символов. Синонимами по стандарту ISO для типа varchar являются типы char varying или character varying.

Данные char или varchar могут быть отдельным знаком или строкой максимальной длиной в 8000 символов для данных char и до 2^31 символов для данных varchar.

Типы данных varchar могут принимать две формы. Данные varchar могут быть указанной максимальной длины в знаках, например varchar(6) свидетельствует о том, что в этом типе данных может храниться максимум шесть символов или он может иметь вид varchar(max), увеличивающий максимальное число символов, которые могут храниться в этом типе данных, до 2^31.

Символьные константы должны быть заключены в одинарные (") или двойные кавычки ("). Рекомендуется заключение символьных констант в одинарные кавычки. Заключение символьных констант в двойные кавычки иногда не допускается, если параметру QUOTED IDENTIFIER присвоено значение ON.

Данный пример кода Transact-SQL присваивает символьной переменной значение:

DECLARE @MyCharVar CHAR(25)

SET @MyCharVar = "Ricardo Adocicados"

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

Например:

SET @MyCharVar = "O""Leary"

Если данные, подлежащие хранению, длиннее, чем допустимое число символов, они усекаются. Например, если столбец определен как char(10) и в нем сохраняется значение "Это действительно очень длинная символьная строка", то SQL Server усекает символьную строку до "Это действ".

Тип данных char становится типом данных с фиксированной длиной, если указано предложение NOT NULL. Если в столбец char с предложением NOT NULL вставляется значение короче, чем длина столбца, это значение заполняется вправо при помощи пробелов до размера столбца. Например, если столбец определен как char(10) и в нем должно быть сохранено значение "музыка", SQL Server сохраняет данные в виде "музыка____", где "_" обозначает пробел.

2.3.2 Типы данных nchar и nvarchar.

Это - символьные типы данных, имеющие постоянную длину (nchar), или переменную длину (nvarchar), содержащие данные в Юникоде и использующие набор символов UCS-2.

nchar [ (n) ] - символьные данные в Юникоде длиной в n символов. Аргумент n должен иметь значение от 1 до 4000. Размер хранилища вдвое больше n байт. Синонимами по стандарту ISO для типа nchar являются типы national char и national character.

nvarchar [ (n | max) ] - символьные данные в Юникоде переменной длины. Аргумент n может принимать значение от 1 до 4 000. Аргумент max указывает, что максимальный размер хранилища равен 2^31-1 (2 147 483 647) байт. Размер хранилища в байтах вдвое больше числа введенных символов + 2 байта. Введенные данные могут иметь длину в 0 символов. Синонимами по стандарту ISO для типа nvarchar являются типы national char varying и national character varying.

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

Что такое тип данных?

Сегодня существует сразу несколько определений, которые объясняют сущность понятия «тип данных». Каждое из них имеет один общий смысл. Условно тип данных можно обозначить как группу данных, характеризуемую ее значениями – числовыми, символьными и так далее– а также операциями, которые могут применяться по отношению к рассматриваемым значениям. Сфера использования различных типов данных очень многогранна. Данные могут использоваться не только для хранения информации, но также и при программировании для решения поставленных задач. При разработке программ большое распространение получила практика использования собственных типов данных с определенным набором операций. В основе пользовательской информации всегда лежат основные типы данных. Стандарт SQL основан на использовании наиболее распространенных типов информации, однако с рядом определенных дополнений.

Типы данных: классификация

Группировка данных по типу появилась достаточно давно. Она была вызвана необходимостью структурирования всех объемов информации для обеспечения удобства их обработки. Сегодня в основе всех существующих типов данных лежат два базовых: символьный и числовой. На основе этих данных была разработана современная классификация, которая включает в себя указатели, целочисленный, логический, числовой с плавающей запятой и строковый тип информации. Все вышеперечисленной полностью охватывает классификация SQL. Однако для современных систем управления базами данных существуют специальные надстройки. К ним относятся MySQL и Oracle.

Базовые типы данных

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

Строковый тип данных

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

— CHAR (size) – данный тип используется для хранения строк. Указанный в скобках параметр позволяет фиксировать длину хранимой строки. Для строки можно задать максимальный размер в байтах – 255.

— VAR CHAR (size) — по аналогии с предыдущим типом данный тип позволяет хранить строки, длина которых не превышает 255 символов. Основное отличие данного типа от CHAR состоит в том, что здесь для хранения значения данного типа выделяется требуемое количество памяти. Таким образом, для строки, которая состоит из 5 символов, будет нужно 6 байт памяти. В первом случае память для хранения значения будет выделена в соответствии с указанным параметром.

— TINY TEXT- данный тип применяется для хранения текстовой информации, объем которой не превышает 65535 символов.

— BLOB – этот тип аналогичен типу TEXT. Он позволяет сохранять в базе текстовую информацию, объем которой может составлять до 65 535 знаков. Однако на практике данный тип может использоваться для хранения рисунков, звуковой информации, электронных документов и прочего.

— MEDIUM TEXT – данный тип был разработан на основе типа TEXT. За счет увеличенного до 16777 215 символов размера данный тип позволяет хранить больше данных.

— MEDIU MBLOB – применяется для хранения в базе электронных документов, размер которых не превышает 16777215 символов.

— LONG TEXT – по функциональным возможностям аналогичен предыдущим типам данных, однако имеет объем памяти, увеличенный до4 Гб.

— LONG BLOB–дает возможность размещать в базе данных данные большого объема – 4294967295 символов.

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

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

Таблица с дробными типами данных

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

FLOAT (sized) – применяется для хранения дробных чисел указываемой точности – d;

— DOUBLE (sized) – применяется для хранения дробей с двоичной точностью;

— DECIMAL (size, d) – применяется для хранения дробных значений в виде строк. Применяется в банковских расчетах, где точность дробной части может достигать 8-ми или 10-ти знаков.

Два первых типа в данной области не могут быть задействованы. Хранение финансовых показателей в форме строк может значительно облегчить решение многих практических задач. При проведении операций и решении финансовых вопросов SQL-преобразование типов данных имеет большое значение. Разработчикам обязательно следует учитывать тип хранения информации и способы обработки, чтобы данные постоянно оставались неизменными.

Данные целочисленного типа

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

  • INT (size) – отвечает за хранение целочисленных данных в диапазоне [-231;231-1].
  • TINYINT (size) – применяется для хранения чисел в диапазоне от -128 до 127.
  • SMALLINT (size) – характеризуется несколько увеличенным диапазоном хранимых данных от -32768 до 32767.
  • MEDIUMINT (size) – применяется для хранения чисел размерностью от -223 до 223-1.
  • BIGINT (size) – охватывает диапазон целочисленных значений от -263 до 263-1.

Если выбрать правильный тип данных, то можно существенно сэкономить память и при этом уменьшить затраты серверного времени при выполнении необходимых SQL-запросов. Типы данных и их диапазон определяют количество требуемой памяти для хранения. Разработчикам необходимо помнить, что использование больших диапазонов для атрибутов может повлечь за собой увеличение затрат на память. Следует четко анализировать решаемые задачи и выявлять ситуации, в которых известен примерный диапазон данных и определено условие использования чисел со знаком. Если используется небольшой диапазон используемых аргументов, а все числа будут положительными, то корректнее будет воспользоваться беззнаковым типом, для которого предназначен атрибут UNSIGNED.

Типы данных времени и даты

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

  • DATE – основное предназначение данного типа заключается в хранении даты в формате «год-месяц-день». Значения обычно разделяются через «-». Однако иногда в качестве разделителя могут быть задействованы любые символы, за исключением цифр.
  • TIME – дает возможность заносить временные значения в ячейку таблицы. Значения задаются форматом «hh:mm:ss».
  • DATE TIME – этот тип объединяет в себе функции двух предыдущих. Формат хранения данных в этом случае выглядит следующим образом «yyyy-mm-dd: hh:mm:ss».
  • TIME STAMP – данный тип сохраняет дату и время, исчисляемые количеством секунд, которые прошли начиная с полуночи 01.01.1970 года до заданного значения.
  • YEAR (M) – применяется для хранения годовых значений в двух- или четырехзначном формате.

Что еще следует знать? Все представленные выше типы данных были систематизированы компанией Microsoft. Ей также более подробно были разработаны типы данных SQL. Так, к примеру, формой было расписано, какой объем памяти выделяется при использовании каждого типа данных. После изучения всей имеющейся информации разработчикам должно стать проще спроектировать структуру базы и таблиц исходя из аппаратных возможностей сервера.

NULL- специальный указатель

В некоторых случаях при заполнении базы данных возникает ситуация, когда при добавлении в таблицу записи отсутствует необходимость вносить информацию во все столбцы. Для этого необходимо использовать специальный указатель пустого назначения или NULL. Он в качестве вспомогательного средства применяет язык SQL. Типы данных столбцов, которые необязательно должны заполняться, указываются с оператором, разрешающим включение пустых значений, при создании таблиц. Также оператор NULL при использовании дополнительной приставки NOT может быть использован для указания обязательного заполнения всех значений. У указателя NULL нет типа. Он просто указывает в таблицах баз данных на пустое значение. По этой причине он вполне может быть скомбинирован с одним из представленных выше типов данных.

1.1. Символьные типы

1) Строки постоянной длины
CHAR() – строка текста в формате, определенном разработчиком. Натуральное число задает строки.
На практике максимальное число символов бывает в диапазоне от 256 в MS SQL Server до 32767 в InterBase.
CHAR трактуется как CHAR(1)

2) Строки переменной длины
VARCHAR|CHAR VARYING [()] – строка текста переменной длины в формате, определенном разработчиком. Натуральное число задает максимальную строки, но в таблице отводится место только под реальную длину строки.

3) Особенности символьных типов ряда СУБД
В ряде СУБД, например, MS SQL Server, если CHAR допускает значение NULL, то от трактуется как VARCHAR.
В Oracle для полей типа VARCHAR2 можно зарезервировать в каждом блоке место для будущих обновлений поля, определив опцию PCTFREE.

1.2. Числовые типы

1) Целые типы данных
INT – число без десятичной точки. Размер зависит от конкретного варианта реализации. Часто это 4 байта.
SMALLINT – совпадает с INT, но обычно меньше по размеру. Часто 2 байта.
BIGINT – совпадает с INT, но обычно больше по размеру. Это 4 или более байта.

2) Вещественные числа с фиксированной точкой
DEC|)] – десятичное число с фиксированной точкой.
Число имеет:
— общее число значащих десятичных разрядов,
— максимальное количество разрядов справа от десятичной точки.

3) Вещественные числа с плавающей точкой
FLOAT – число с плавающей точкой, представленное в экспоненциальной форме по основанию 10. Задается максимальная точность.
REAL – совпадает с FLOAT, но точность зависит от варианта реализации.
DOUBE – совпадает с REAL, но точность может быть больше в конкретной реализации.

1.3. Даты и типы времени

DATE – дата в формате yyyy-mm-dd (ISO), mm/dd/yyyy (ANSI).
TIME – время в формате hh.mm.ss (ISO), hh:mm am/pm (ANSI).
INTERVAL – дата и время в формате yyyy-mm-dd-hh.mm.ss.nnnnn (ISO). (часто TIMESTAMP).

Примечание:
Типы даты и времени могут задаваться в виде строковых литералов.
Дата: ‘yyyy-mm-dd’, время: ‘hh.mm.ss’,
Интервал: ‘yyyy-mm-dd-hh.mm.ss.n…n’.

1.4. Логический тип

BOOLEAN – логическое значение (TRUE, FALSE, UNKNOWN).
Для правильного понимания таблицы истинности в трехзначной логике (3VL) можно условно считать, что FALSE — 0, TRUE -1, а UNKNOWN – 0.5.
Тогда:
— Оператор AND возвращает наименьшее.
— Оператор OR – наибольшее из исходных значений.
— NOT UNKNOWN = UNKNOWN.

2. Коллекции

Коллекции фактически нарушают первую нормальную форму (1NF).

2.1. Массив

[()] ARRAY – набор однотипных значений.

Примечание:
Массивы были введены в SQL:99.
Пример:
Так, определение WeekDays Varchar(10) ARRAY позволяет хранить название всех семи дней недели в одном поле.
Ряд СУБД допускают даже многомерные массивы. Так в InterBase возможно до 16 изменений, Clarion – 4.

2.2. Мультимножество

[()] MULTISET – неограниченный набор однотипных значений, допускающий дубликаты.
Значения создаются конструктором – специальными функциями.

Примечание:
Мультимножества были введены в SQL:2003.

2.3. Анонимный строковый тип

ROW ([()] , …) – набор разнотипных значений, включая вложенные.
Опции могут задавать порядок сортировки полей строкового типа и ряд других установок.

Пример:
Так, определив Address ROW(State Char(6), City Varchar(30), Street Varchar(50)) позволяет хранить подробный адрес в одном поле.

3. Типы LOB

CLOB (Character Large Object) – ведут себя во многом подобно символьным строкам, но их запрещено использовать:
— В ограничениях Primary Key, Unique, Foreign Key.
— В сравнениях, отличных от чистых равенств или неравенств, в разделах Order By и Group By.
BLOB (Binary Large Object) – поток байт в формате, в котором пользователь сможет их записать в колонку БД.

3.1. Проблемы использования LOB

1) Проблемы хранения
Хранение LOB прямо в таблицах вместе с другими данными нарушает работу оптимизатора, основанную на использовании страниц данных, размер которых соответствует размеру дисковых страниц.
Поэтому LOB хранятся в отдельных областях (сегментах) дисковой памяти.

2) Проблемы обновления
Поскольку размер LOB объектов может достигать десятков и сотен мегабайт, то их невозможно хранить в буферах целиком. Поэтому данные типа LOB обрабатываются по частям, например, группами страниц. В операторах INSERT и UPDATE для обработки по частям используются специальные технологии, позволяющие многократно вызывать одну и ту же API-функцию для одного поля. Аналогично и при считывании данных операторами SELECT и FETCH.

3) Проблемы выполнения транзакций
Для поддержки транзакций большинство СУБД ведет журнал транзакций, в котором записываются копии данных до и после модификаций.
Однако из-за больших размеров LOB не записываются в журнал.

4) Проблемы пересылки по сети
Часто клиент и сервер работают на разных компьютерах, и пересылка LOB по сети может прервать работу всех, кто пользуется сетью в данных момент.

4. Разные типы

4.1. Locator

Уникальное двоичное (четырехбитное) значение (в ООП – дескриптор), сохраняемое в БД.
Описывается в главной программе и действует до конца транзакции.
Предназначен для манипуляции LOB-значениями (или массивами) на стороне клиента. Вместо LOB клиенту посылается ссылка на него.
Можно объявить: LOC: Integer AS LOCATOR.

4.2. XML

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

4.3. Datalink

Datalinks являются частью SQL/MED 9075-9:2003.
Datalink представляет собой особый тип SQL предназначен для хранения URL-адресов в БД, а также ряд функций, которые могут быть использованы в SQL запросах.
С особенностями и поддерживаемыми функциями можно ознакомится на сайте:
Wiki.postgresql.org/wiki/DATALINK

Используются в DB2, Oracle – для хранения данных во внешнем файле BFile.

Понравилась статья? Поделитесь ей