Большинство SQL -серверов имеют схожие типы данных, хотя имеются и различия. После того обилия типов, к которому мы привыкли в базах данных Paradox или , может показаться, что SQL -серверы имеют очень ограниченный набор типов данных. Связано это в первую очередь, с ограничениями стандартов языка запросов SQL.
Например, не имеет:
Boolean. Вместо него предлагается использовать символьный тип данных Char (1).Currency . В все настолько взаимосвязано, что очень сложно говорить о какой-то одной теме, не затрагивая при этом другие. На этой лекции мы коротко затронем вопрос создания таблиц, хотя полностью развернем эту тему позже. Таблицы создаются с помощью специального SQL -запроса, и для этого проще всего использовать утилиту для работы с базами данных. Если сервер у вас не запущен, запустите его. Также откройте утилиту , войдите в локальный сервер и откройте базу данных FIRST. На панели задач находится кнопка
(рис 16.1) Значок утилиты "Interactive SQL"Нажав на эту кнопку, вы увидите окно Интерактивного SQL:
(рис 16.2) Interactive SQLНа рисунке указаны основные кнопки, с которыми вам придется работать, и два окна: для ввода запроса, и для вывода результатов запроса. Строка состояния содержит адрес и имя текущей базы данных, в нашем случае это C:\DataBases\first.gdb. Все запросы, которые мы будем вводить, будут относиться к этой БД.
Еще следует заметить, что в синтаксисе запросов не обязательно использовать заглавные буквы для ключевых слов, однако мы будем придерживаться рекомендаций SQL по этому вопросу.
поддерживает два типа целых чисел:
Здесь рекомендации обычные: экономить на дисковом пространстве для чисел не стоит, поэтому используйте INTEGER, которое также можно обозначать сокращенным синтаксисом INT. Заметим здесь же, что длинное целое INTEGER также используется для ключевых автоинкрементных полей, идентифицирующих запись, а роль счетчика при этом играют генераторы.
В окне для запросов впишите следующий запрос:
CREATE TABLE Table_Cel( Korotkoe SMALLINT, Dlinnoe INT)
и нажмите кнопку Execute Query (Выполнить запрос). Этим запросом мы дали команду создать таблицу с именем "Table_Cel", которая содержит два поля: " Korotkoe ", имеющее тип Dlinnoe " с типом INTEGER.
Если вы все сделали правильно, запрос исчезнет. Далее можно закрыть FIRST, и в правом окне увидите таблицу TABLE_CEL:
(рис 16.3) Новая таблица созданаЧтобы окончательно убедиться, что все получилось правильно, щелкните правой кнопкой по получившейся таблице и выберите команду Properties. Выйдет окно со списком полей на вкладке Properties. Вкладка Metadata содержит запрос, по которому была создана таблица, а на вкладке Data можно увидеть записи таблицы:
(рис 16.4) Отображение вкладки Metadata свойств таблицы TABLE_CELТаким же образом вы сможете создавать следующие таблицы и контролировать правильность их параметров. Выполняйте все приводимые примеры создания таблиц, так как некоторые из них понадобятся нам в следующих лекциях.
К вещественным типам относятся:
Типа данных REAL в не существует, однако попытка создать поле такого типа не приведет к ошибке, вместо этого создаст поле типа Delphi, приведут к ошибке.
Тип , лучше подойдет тип
CREATE TABLE Table_Vesh( Kol_Float FLOAT, Kol_Double DOUBLE PRECISION)
Здесь первое поле может содержать вещественные числа, имеющие не более 4 знаков после запятой. При попытке сохранить число "1,234567" реально будет записано число "1,2345". Второе поле обеспечивает большую точность сохраняемых данных.
В вещественных полях нельзя управлять количеством цифр после запятой, поэтому если вам потребуется, выводить только две цифры, в программе придется использовать маску ввода, например "#,###.##".
Таких типов два:
Поскольку специальных типов
Как видите, в первых двух случаях используются целые типы столбцов, и если даже вы укажете точность, числа после запятой будут утеряны. Следовательно, чтобы сохранить вещественное число в полях
CREATE TABLE Table_Fiks( Kol_Dec DECIMAL(15,2), Kol_Dec2 NUMERIC(8,2))
При, казалось бы, похожем объявлении в первом случае мы получили вещественное поле, в котором может храниться число типа 9999999999999,99, зато второе поле сможет хранить только целую часть числа. То есть, при попытке сохранить число 123456,78, в таблице останется число 123456, а поле будет иметь тип INTEGER.
поддерживает три типа данных, работающие с датой и временем, причем применение этих типов напрямую зависит от используемого в базе данных диалекта SQL.
Delphi. Содержит одновременно и дату, и время в виде двух целых 32-битовых чисел. Первое число содержит порядковый номер дня, прошедший с 01.01.0001. Второе число указывает количество миллисекунд, прошедших с полуночи. Этот тип может применяться как в первом, так и в третьем диалектах SQL.
SQL. Попытка создать поле типа
SQL. Попытка создать поле типа
Обычно данные этих типов заполняются на компьютере клиента, а там все зависит от настроек операционной системы. Не следует забывать, что даты на компьютере пользователя могут выводиться по-разному, в зависимости от настроек ОС. Например, в английской вариации дат вначале указывается месяц, затем день, и год, тогда как у нас первым идет день. Кроме того, английская (американская) неделя начинается не с понедельника, а с воскресенья. А разделителем значений могут быть и точка ".", и слеш "/", и тире "-". Чтобы избежать конфликтов при работе вашей программы (клиентской части), полезно сразу программно переустановить формат даты и времени на компьютере клиента в привычный российский формат (пример ниже приводится для программ Delphi, а не для
DateSeparator := '.'; ShortDateFormat := 'dd.mm.yyyy'; ShortTimeFormat := 'hh:mm:ss';
После этого в клиентской части программы дату и время спокойно можно вводить в привычном для нас формате. Пример создания таблицы с полями даты и времени (пример корректен только для 3 диалекта SQL ):
CREATE TABLE Table_DateTime(
Kol_Date DATE,
Kol_Time TIME,
Kol_TimeStamp TIMESTAMP)
Существует два текстовых типа данных:
n - указывает количество символов в поле. В обоих типах n может быть от 1 до 32767 символов (32 Кбайт). Если n не указать, по умолчанию будет присвоено число 1. Пример создания полей:
CREATE TABLE Table_Text( Kol_Char CHAR, Kol_Varchar VARCHAR(255))
В первом случае будет создано поле размером 1 символ, во втором случае в поле можно сохранить текст размером до 255 символов. Между этими типами данных есть отличия. Тип CHAR предназначен для хранения текста фиксированной длины. Другими словами, если мы определим поле в 10 символов, а запишем только 5, то текст будет дополнен завершающими пробелами до полной длины. Тип VARCHAR хранит текст переменной длины, и возвращает сохраненный текст без завершающих пробелов. Тем самым, использование типа VARCHAR в большинстве случаев является предпочтительным.
Еще важными факторами при работе с текстовыми полями является кодировка символов и порядок их сортировки. Как мы знаем из прошлой лекции, при создании базы данных можно указать кодировку "по умолчанию", для кириллицы предпочтительней будет кодировка WIN1251. При этом все создаваемые текстовые поля будут иметь эту кодировку, в чем несложно убедиться, выполнив описанный выше запрос, и посмотрев вкладку Metadata созданной таблицы:
(рис 16.5) Установки кодировки "по умолчанию"Как видно из рисунка, с помощью оператора
CREATE TABLE Table_Text2( Kol_Char CHAR CHARACTER SET WIN1251, Kol_Varchar VARCHAR(255) CHARACTER SET ASCII)
Если кодировка указана явно, именно она и будет использована при создании столбца таблицы.
Для символьных полей также возможно указывать порядок сортировки PXW_CYRL. В первом случае русские символы сортируются как
АБВ….эюя
что не очень удобно. Сортировка PXW_CYRL предпочтительней, она выводит русские символы в таком порядке:
аАбБ…яЯ
Пример:
CREATE TABLE Table_Text3( Kol_Char CHAR CHARACTER SET WIN1251 COLLATE WIN1251, Kol_Varchar VARCHAR(255) CHARACTER SET WIN1251 COLLATE PXW_CYRL)
Binary Large Object - Большой двоичный объект) - Поле неограниченного размера, может содержать любой тип двоичных данных, например, файл с фотографией, мелодией или цифровой книгой, или просто большой текст (аналог MEMO ). Пример определения поля:
CREATE TABLE Table_BLOB( Kol_BLOB BLOB)
Поля
У этого типа есть возможность указывать явно подтип: целое число, определяющее тип хранимых в поле данных. По умолчанию, 0 указывает на двоичные данные и 1 указывает на ASCII - текст. Программист может указывать собственные типы, используя отрицательные значения. Подтип указывается оператором
CREATE TABLE Table_BLOB2( Kol_BLOB BLOB SUB_TYPE -1)
Однако заметим, что эта возможность практически не используется программистами.
В столбец любого типа, кроме
CREATE TABLE ARRAY_TABLE(
ARRAY1 INTEGER [10],
ARRAY2 FLOAT [0:10, 5:10]);
В этом примере была объявлена таблица из двух столбцов-массивов. В первом случае объявлен массив целых чисел с диапазоном от 1 до 10 элементов, во втором случае объявлен двухмерный массив вещественных чисел с указанными программистом границами элементов. Это эквивалентно объявлению в Delphi двух переменных-массивов:
Var Array1 [1..10] of Integer; Array2 [0..10, 5..10] of Float;
Однако стандарт SQL -92, поддерживаемый , не поддерживает столбцов-массивов, поэтому доступ к отдельным значениям возможен только с помощью низкоуровневых функций API . Практически же такие столбцы используют крайне редко, ведь проще объявить, например, три поля с целыми числами, чем одно целое поле-массив, имеющее три элемента. В этом курсе мы не будем рассматривать работу полей-массивов, однако знать о существовании такого типа нужно. Любителям выбирать путь посложней, рекомендуем обратиться к справочнику и технической документации .
Как уже говорилось выше, в не поддерживаются типы Boolean. Вместо этого предлагается использовать тип CHAR(1), который создает односимвольный столбец, и вводить значения типа T/F, Y/N, Д/Н, 1/0, +/- и т.п. Проверка логики и правильности ввода значения возлагается на клиентское приложение.
Доменом в называется заранее созданное описание столбца, которое хранится отдельно от таблиц. Зачем это нужно? Предположим, планируемая база данных будет содержать десятки таблиц. Предположим далее, что во многих из этих таблиц потребуются поля с фамилией, именем и отчеством каких то людей. Можно было бы описать эти поля обычным образом, например (следующий запрос вводить в
CREATE TABLE Table_Firma( Familiya VARCHAR(20) CHARACTER SET WIN1251 COLLATE PXW_CYRL, Imya VARCHAR(20) CHARACTER SET WIN1251 COLLATE PXW_CYRL, Otchestvo VARCHAR(20) CHARACTER SET WIN1251 COLLATE PXW_CYRL)
Но обратите внимание на то, что нам пришлось много раз повторить одно и то же описание типа поля. А если такой же тип будет содержаться и в других таблицах? Гораздо предпочтительней создать
CREATE DOMAIN FIO AS VARCHAR(20) CHARACTER SET WIN1251 COLLATE PXW_CYRL
Выполните последний запрос в Table_Firma существенно упростится:
CREATE TABLE Table_Firma( Familiya FIO, Imya FIO, Otchestvo FIO)
Этот же
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.