Н. Р. Бухараев Введение в программирование на sql в среде субд ms visual FoxPro icon

Н. Р. Бухараев Введение в программирование на sql в среде субд ms visual FoxPro




НазваН. Р. Бухараев Введение в программирование на sql в среде субд ms visual FoxPro
Сторінка2/5
Дата конвертації10.04.2013
Розмір0.91 Mb.
ТипДокументи
1   2   3   4   5

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


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


^ Подобно традиционному понятию процедуры, транзакция – логическая операция, реализуемая с помощью команд языка.

Отличие - в явном допущении возможности лишь частичного выполнения.

^ Основной принцип транзакции - "все или ничего". Сбой при выполнении любой команды ведет к откату – невыполнению всей транзакции.


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


Итак, с точки зрения логики моделирования


База данных =

(Базовые) Таблицы + Отношения + Правила целостности + Представления


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


Синтаксис SQL Visual FoxPro.


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


С другой стороны, SQL образует вполне изолированный подъязык FoxPro, совершенно отличный от него как по духу, так и синтаксису. В отличие от "базового" FoxPro, SQL является декларативным языком преобразований таблиц в целом, а не процедурным языком обработки их записей; синтаксис команд SQL замкнут и не содержит ссылок на текущее состояние переменных окружения, столь многочисленных в командах FoxPro.


Щадя читателя и следуя принципу "разумной достаточности", мы далее немного упрощаем синтаксис - в основном, за счет исключения синонимии и редко используемых опций. Наиболее полный синтаксис FoxPro SQL, как всегда, можно найти в справочной системе FoxPro, на которую мы в дальнейшем будем ссылаться как на “документацию”. Расширения языка, отсутствующие в стандарте (и, возможно - в используемой читателем версии) SQL отмечены символом *


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


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


Поддерживаемый также FoxPro аппарат "сквозного SQL" , или технологии SPT (SQL-pass-through) более эффективен, но и более изощрен - кроме знания достаточно обширного дополнительного набора функций SQL, он предполагает и детальное знание версии SQL, "работающей" на сервере. Любознательный читатель, как всегда, найдет более полную информацию в справочной системе FoxPro.


^ Выражения и предикаты в SQL.


Итак, в рамках поставленной задачи нам необходимо и достаточно знания лишь "классического набора” выражений SQL, а именно - арифметических выражений и предикатов следующего вида:


а) Сравнения


Аргумент1 Знак_сравнения Аргумент2

где знак сравнения - один из символов отношений = (равенство), <>, !=, # (неравенство) и >, >=,<,<=, а также, для символьных строк, == (точное равенство) и [NOT] LIKE (сравнение по маске),


Заметьте, что, если для числовых типов и типа "дата" такие сравнения имеют обычный смысл, то для символьных строк имеется ввиду лексикографическое (словарное) сравнение, а равенство = несимметрично и понимается в FoxPro как вхождение второго аргумента в первый как начального подслова (см. документацию о зависимости такого сравнения от установок системных переменных ANSI и EXACT).


Предикат сравнения по маске имеет вид


Аргумент [NOT] LIKE Маска


где Маска - произвольная символьная строка, (возможно) содержащая специальные символы кратной замены % и одиночной замены _. Предикат [NOT] LIKE считается истинным, если маску можно превратить в стоящий слева аргумент подстановкой некоторых слов вместо символа % и одиночных символов - вместо символов _.


б) ^ Булевские формулы, как обычно, образуются с помощью операций конъюнкции AND, дизъюнкции OR и отрицания NOT


в) "Синтаксический сахар" - группа предикатов, выразимых через булевские комбинации сравнений, но более кратких и привычных по форме (особенно, для англоязычного пользователя)


Аргумент1 [NOT] BETWEEN Аргумент2 AND Аргумент3

- краткая форма записи предиката

[NOT] (Аргумент2 Аргумент1 AND Аргумент1Аргумент3)


Аргумент [NOT] IN (список_значений)

- краткая форма записи предиката

[NOT] (Аргумент=Аргумент1 OR АргументАргумент2 OR … Аргумент=АргументN)


г) ^ Предикаты, использующие выборку образуют самый мощный - и самый сложный в освоении аппарат программирования SQL.


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


Имя_поля Знак_сравнения ALL (команда SELECT)


истинно, если сравнение выполняется для стоящего слева значения поля и всех значений, выбранных командой SELECT; при этом предполагается, что последняя выдает список значений - формально, таблицу с единственным полем, совместимым по типу со значением поля, стоящим слева. Условие считается истинным также, если подвыборка пуста.


Имя_поля Знак_сравнения ANY | SOME (команда SELECT)


истинно, если сравнение выполняется для стоящего слева значения поля и хотя бы одного из значений, выбранных командой SELECT - снова предполагается, что последняя выдает список значений, совместимых по типу со значением поля. Если подвыборка пуста, условие считается ложным.


[NOT] EXISTS (команда_SELECT)


истинно, если подвыборка (не) пуста, т.е. (не) содержит по крайней мере одну строку.


Имя_поля [NOT] IN (команда_SELECT)


имеет тот же смысл, что и одноименный предикат IN, рассмотренный выше, с той лишь разницей, что список значений не задается явно, но является результатом подвыборки; истинен, если значение поля совпадает хотя бы с одним значением из (единственного поля) результата выборки.


^ СОЗДАНИЕ И МОДИФИКАЦИЯ СТРУКТУРЫ БД


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


Для опытных программистов заметим, что описание структуры БД Visual FoxPro содержит в файле с расширением .dbc, являющимся на деле .dbf-таблицей (что расширяет и без того достаточно богатые возможности программного определения и модификации структуры БД).


^ СОЗДАНИЕ ТАБЛИЦЫ


CREATE TABLE Имя_создаваемой_таблицы [NAME* Длинное - до 128 символов - имя_таблицы] [FREE*]

[(ОПИСАНИЕ ПОЛЯ 1 [ПРАВИЛА КОРРЕКТНОСТИ ПОЛЯ 1)],

[(ОПИСАНИЕ ПОЛЯ 2] [ПРАВИЛА КОРРЕКТНОСТИ ПОЛЯ 2])],

…..

[(ОПИСАНИЕ ПОЛЯ n] [ПРАВИЛА КОРРЕКТНОСТИ ПОЛЯ n])],

^ [ПРАВИЛА КОРРЕКТНОСТИ ЗАПИСИ]


(опция FREE - свободная таблица - используется в том случае, если программист не хочет включать создаваемую таблицу ни в одну из существующих БД; в противном случае, по умолчанию, таблица будет включена в БД, открытую на момент исполнения команды CREATE TABLE)


где


^ ОПИСАНИЕ ПОЛЯ -

Имя_поля

Тип_поля

[(Ширина_поля [,Точность (число знаков после запятой - для числовых типов])]


далее перечисляются допустимые в FoxPro скалярные типы, с указанием имени типа и допустимости для соответствующего типа, опций указания ширины поля (Ш) и точности (Т).


Тип Ш Т Комментарий

C n - Character - cимвольная строка некоторой длины n

D - - Date - Дата

T - - dateTime - Дата-время

N n d Numeric - вешественное длины n , d знаков после

запятой

F n d Floating numeric - вещественное длины n, d знаков

после запятой, в форме с плавающей точкой

I - - Integer - целое

B - d douBle - целое двойной точности

Y - - currencY - денежная сумма

L - - Logical - логический

M - - Memo - строка неопределенной длины

G - - General - ссылка на внешний объект


Скалярные типы данных могут различаться как по синтаксису, так и по семантике в различных версиях SQL.


ПРАВИЛА КОРРЕКТНОСТИ ПОЛЯ - одна или несколько опций вида


[NULL | NOT NULL] - значением поля может (не может) быть неопределенное значение NULL; по умолчанию, значение опции определяется значением системной (SET-)переменной NULL; также по умолчанию, значение NULL не допустимо для первичных ключей и уникальных (UNIQUE) полей;


[CHECK Условие корректности поля [ERROR* Текст сообщения о нарушении условия]] - проверяется при каждой модификации, а также при добавлении "пустой" записи; сообщение об ошибке появляется лишь при работе в интерактивном режиме


[DEFAULT Значение поля по умолчанию]


[PRIMARY KEY | UNIQUE] - значение поля является (единственным) первичным ключом записи | должно быть уникальным для каждой записи таблицы; для поддержки соответствующего правила создается индекс с именем, совпадающим с именем поля:


[REFERENCES Имя_родительской_таблицы [TAG Имя (тег) индекса]] - значение поля является внешним ключом указанной родительской таблицы [по данному индексу]


ПРАВИЛА КОРРЕКТНОСТИ ЗАПИСИ - список из одной или несколько опций вида


[PRIMARY KEY Выражение TAG* Имя (тег) индекса |, UNIQUE Выражение TAG* Имя индекса] - указанное выражение определяет (единственный составной) первичный ключ записи | обязано быть уникальным для каждой записи; для поддержки соответствующего правила создается индекс с указанным именем (тегом);


[, FOREIGN KEY Выражение TAG* Имя_индекса

REFERENCES Имя_родительской таблицы [TAG* Имя индекса родительской таблицы]] - указанное выражение определяет (составной) внешний ключ записи, поддерживаемым родительским индексом с указанным тегом


[, CHECK Условие корректности записи [ERROR* Текст сообщения о нарушении условия]]) - проверяется при каждой модификации, а также при добавлении "пустой" записи; сообщение об ошибке появляется лишь при работе в интерактивном режиме


^ УДАЛЕНИЕ ТАБЛИЦЫ


DROP TABLE Имя_таблицы | Имя_файла | ? [RECYCLE]

удаляет таблицу из текущей БД; опция ? выдает диалоговое окно выбора таблицы; подопция RECYCLE указывает на то, что удаленную таблицу нужно поместить в "корзину" ОС Windows c возможностью последующего восстановления, в противном случае восстановление невозможно.


^ УДАЛЕНИЕ ПРЕДСТАВЛЕНИЯ


DROP VIEW имя_представления


МОДИФИКАЦИЯ СТРУКТУРЫ ТАБЛИЦЫ


ALTER TABLE Имя_таблицы

ADD | ALTER [COLUMN] Имя_поля

Тип_поля [(Ширина_поля [, Точность])]

^ [NULL | NOT NULL]

[CHECK Правило_корректности_поля

[ERROR Текст_сообщения_о_нарушении_правила]]

[DEFAULT Значение_по_умолчанию]

[PRIMARY KEY | UNIQUE]

[REFERENCES Имя_родительской_таблицы

[TAG Тег(имя)_индекса]]

или


ALTER TABLE Имя_таблицы

ALTER [COLUMN] Имя_поля

^ [NULL | NOT NULL]

[SET DEFAULT Значение_по_умолчанию]

[SET CHECK Правило_корректности_поля

[ERROR Текст_сообщения_о_нарушении_правила]]

[DROP DEFAULT]

[DROP CHECK]

или


ALTER TABLE Имя_таблицы

[DROP [COLUMN] Имя_поля]

[SET CHECK Правило_корректности_поля

[ERROR Текст_сообщения_о_нарушении_правила]]

^ [DROP CHECK]

[ADD PRIMARY KEY Выражение_первичного_ключа

TAG Тег(имя)_индекса_первичного_ключа]

[DROP PRIMARY KEY]

[ADD UNIQUE Выражение [TAG Тег_индекса]]

[DROP UNIQUE TAG Тег_индекса]

[ADD FOREIGN KEY [Выражение_внешнего_ключа]

TAG Тег_индекса

REFERENCES Имя_родительской_таблицы

[TAG Тег_родительского_индекса]]

[DROP FOREIGN KEY TAG Тег_индекса]

[RENAME COLUMN Старое_имя_поля TO Новое_имя_поля]

Несмотря на устрашающий синтаксис, семантика команды ALTER TABLE легко выводится из пояснений к команде CREATE TABLE и значений английских слов ALTER - изменить, ADD - добавить, DROP - удалить, SET - положить равным, RENAME - переименовать.


Замечание. Пожалуй, единственным существенным упущением текущей версии FoxPro по сравнению с другими реализациями и стандартом SQL является отсутствие команды создания пользовательского индекса Create Index (и, соответственно команды удаления индекса Drop Index). Правда, это упущение – чисто синтаксическое, поскольку имеется достаточно мощная команда-аналог самого FoxPro – а именно, команда Index (см. документацию).


^ МОДИФИКАЦИЯ СОДЕРЖИМОГО ТАБЛИЦ


Добавление записи.


INSERT INTO имя_таблицы [(список_имен_полей])]

VALUES (список_выражений)


где

имя_таблицы - имя dbf-файла, возможно - с указанием пути (или же имя-алиас рабочей области таблицы; может быть задано строковым выражением).


В случае, когда список имен полей задан, он, очевидно, должен быть согласован по типу со списком выражений, задающим значения соответствующих полей в добавляемой записи; если же список имен полей отсутствует, то, по умолчанию, подразумевается список имен всех полей таблицы. В любом случае, необъявленные значения полей либо берутся равными значению по умолчанию (см. опцию DEFAULT в команде CREATE TABLE), либо - равными NULL (если системная SET-переменная NULL имеет значение ON)


Замечания.

  1. Текущая версия FoxPro не содержит второй стандартной формы команды - INSERT INTO имя_таблицы (команда SELECT), которая, впрочем легко реализуется - например с помощью цикла SCAN прохода по соответствующему команде выборки представлению или курсору (см. далее)

  2. С другой стороны, FoxPro содержит свои собственные, достаточно многочисленные и часто - изощренные способы генерации записей - см., например APPEND, INSERT в справочной системе FoxPro.



^ Редактирование записей


UPDATE [Имя_базы_данных!]Имя_таблицы

SET Список выражений вида Имя_поля=Выражение

[WHERE Условие_обновления]


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


^ Логическое удаление записей


DELETE FROM [Имя_базы_данных!]Имя_таблицы

[WHERE Условие_удаления]


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


Замечание. Как обычно в СУБД, логическое удаление записей не означает их фактического, т.е. физического удаления - производимого в FoxPro командой упаковки таблицы PACK; до выполнения последней помеченные как удаленные записи могут быть восстановлены командой RECALL. Помеченные, но фактически не удаленные записи могут включаться или не включаться в последующую обработку в зависимости от значения системной SET-переменной DELETED.


^ ЗАПРОСЫ К БД - КОМАНДА SELECT. ПРЕДСТАВЛЕНИЯ


SELECT

[ALL | DISTINCT]

[TOP числовое_выражение [PERCENT]]*

Список выборки


FROM Список_имен_базовых_таблиц


[[INTO Приемник_выборки]

| [TO FILE Имя_файла [ADDITIVE]

| TO PRINTER [PROMPT] | TO SCREEN]]*

[NOCONSOLE]*


[WHERE Условия_связи_и_условия_фильтрации]


[GROUP BY Список_столбцов_группировки]


[HAVING Условия_на_группу]


[UNION [ALL] команда SELECT]


[ORDER BY Список_столбцов_упорядочения]


где


ALL | DISTINCT - запрос на выборку всех (опция по умолчанию)| только различных значений списка выборки; последние считаются различными, если они различаются по значению хотя бы одной компоненты;


TOP числовое_выражение [PERCENT]* - запрос на выборку лишь нескольких первых различных строк выборки; количество различных строк (или процент от общего количества) задается значением числового выражения; используется только при задания порядка выборки - т.е. при использовании опции ORDER BY;


СПИСОК ВЫБОРКИ - список выражений вида


Компонента_выборки [AS Пользовательское имя поля]


Компонентой выборки может быть произвольное - в том числе константное - выражение над полями базовых таблиц; чаще всего это - просто имя поля базовой таблицы. Если базовые таблицы содержат одинаковые имена полей, во избежание коллизии (неоднозначности) имен необходимо использовать полные (квалифицированные) имена полей вида


[Имя или алиас таблицы.] Имя_поля


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


FROM Список_имен_базовых таблиц


список имен таблиц, "опрашиваемых" данной выборкой, вида


[[INNER | LEFT [OUTER] | RIGHT [OUTER] | FULL [OUTER] JOIN *

[Имя_БД!] Имя_таблицы [Локальный алиас]

[ON Условие_связи]


В том случае, когда базовые таблицы принадлежат разным (или - неоткрытой) БД, необходимо использовать полные имена таблиц вида Имя_БД!Имя_таблицы. В случае, когда команда SELECT ссылается на одну базовую таблицу несколько раз (например, в случае вложенных запросов, т.е. использования одной выборки в предикатах другой выборки) во избежание коллизии имен необходимо использовать псевдонимы/алиасы таблиц; последние задают временные имена (копий) таблицы, действительные только на момент выполнения данной выборки;


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


Внутреннее объединение (INNER JOIN) предполагает отбор из обеих таблиц только записей, удовлетворяющих соответствующему условию связи; кроме того, в левое внешнее объединение (LEFT [OUTER] JOIN) отбираются дополнительно все те строки из таблицы, стоящей слева от слова JOIN, в правое внешнее объединение (RIGHT [OUTER] JOIN) - все те строки из таблицы, стоящей справа от слова JOIN, и в полное внешнее объединение (FULL [OUTER] JOIN) - все те строки обеих таблиц, для которых соответствия в другой таблице не существует.


INTO Приемник_выборки| [TO FILE Имя_файла [ADDITIVE] | TO PRINTER [PROMPT] | TO SCREEN]]*


По умолчанию, результат выборки показывается в стандартном (BROWSE-) экранном окне. По желанию, можно указать другое место хранения результирующей таблицы · массив (опция INTO ARRAY имя_массива), временную таблицу "только для чтения", или - курсор (опция INTO CURSOR имя_курсора), таблица (т.е. DBF-файл - опция INTO DBF | TABLE Имя_таблицы [DATABASE Имя_БД [NAME Длинное_имя_таблицы]]), текстовый ASCII-файл (опция TO FILE имя_файла, подопция ADDITIVE указывается при дописывании в уже существующий файл), принтер ( опция TO PRINTER, подопция PROMPT временно останавливает вывод для подготовки принтера), или главное экранное окно (опция TO SCREEN). Опция NOCONSOLE при этом подавляет "эхо"-вывод на экран.


Опция WHERE накладывает критерий, которому должны соответствовать выбираемые записи базовой таблицы (либо декартова произведения базовых таблиц, если их несколько). Любое условие, не являющееся условием связи (см. выше) называется условием фильтрации. Поскольку реализация предполагает специальную обработку условий связи, для повышения эффективности выборки необходимо ставить условия связи (точнее, их конъюнкцию AND) перед всеми условиями фильтрации.


GROUP BY список_полей_группировки


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


  • COUNT(Выражение) - количество значений заданного выражения в группе, не равных NULL;

  • COUNT(*) - число строк в группе;

  • MIN(Выражение) - минимальное значение данного выражения по группе;

  • MAX(Выражение) - максимальное значение данного выражения по группе;

  • SUM(Числовое_выражение) - сумма значений заданного выражения по группе;

  • AVG(Числовое_выражение), - среднее значение заданного выражения по группе;


Примечание. Использование агрегатных функций возможно и без применения опции GROUP BY - в этом случае группой считается вся базовая таблица (декартово произведение базовых таблиц, если их несколько)


HAVING Условие_на_группу


Эта опция по семантике схожа (и иногда путается ) с опцией WHERE, но, в отличие от последней, фильтрует не одиночные записи, а группы. Используется только совместно с GROUP BY. Задаваемое условие на группу не может содержать предикатов с подзапросами и ссылается только на поля из списка группировки. Как правило, это условие.является проверкой значений некоторых агрегатных функций - для проверки значений полей эффективнее использовать опцию WHERE.


[UNION [ALL] команда SELECT] Объединяет результирующие таблицы двух или более выборок (совпадающих по структуре, т.е. количеству и типу компонентов выборки) в одну; в случае объединения более двух выборок необходимы расставить скобки. Заметьте, что тип поля результирующих таблиц в FoxPro определяется по типу первого выбранного значения, что не всегда удобно, т.к. первое значение может оказаться короче последующих. По умолчанию, опция UNION убирает дубликаты из окончательной результирующей таблицы - используйте подопцию ALL (все), если такое положение не устраивает.

Отметим также, что

  • UNION нельзя использовать в подзапросах;

  • При использовании UNION разрешается использовать опцию упорядочения ORDER BY лишь последней объединяемой команды SELECT, со ссылкой на номер (не имя) столбца; в этом случае упорядочение относится ко всей результирующей таблице-объединению.



ORDER BY список_полей_упорядочения [ASC|DESC]

как и в опции GROUP BY, список полей может состоять из имен полей, указанных явно либо выражением, значением которого является имя поля или его номер в списке выборки. В любом случае, подразумевается лексикографическое упорядочение по полям из заданного списка - либо по возрастанию (ASC - опция по умолчанию), либо по убыванию (DESC).


^ СОЗДАНИЕ ПРЕДСТАВЛЕНИЯ


CREATE SQL VIEW [Имя_представления ] [REMOTE]

[CONNECTION Имя_соединения_с_удаленным_источником [SHARE]

| CONNECTION Имя_удаленного_источника_данных]

[AS команда SELECT]


REMOTE опция создания удаленного представления, выбирающего данные от источника данных, отличного от локальных таблиц FoxPro. При этом имя удаленного источника может быть задано либо явно - опция CONNECTION Имя_удаленного_источника_данных, либо указанием на именованное соединение - опция CONNECTION Имя_соединения_с_удаленным_источником. Подопция SHARE указывает на распределенное соединение, обслуживающее несколько представлений. Наиболее простой способ определить именованное соединение в диалоговом режиме обеспечивается командой CREATE CONNECTION ? (другие подопции этой команды см. в документации).


AS команда_SELECT

собственно определение представления


Замечание.

В FoxPro допустимы

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

  2. модифицируемые представления; при этом cуть определения модифицируемости состоит в следующем

  • каждая базовая таблица, в которой будет происходить реальная физическая модификация данных, обязана иметь первичный ключ;

  • этот первичный ключ обязан содержаться в модифицируемом представлении.

Более точное определение модифицируемости представлений можно найти в документации.


^ СОЗДАНИЕ КУРСОРА


Курсор – это временная таблица, с которой можно обращаться точно также, как с обычной таблицей БД, за одним, но важным исключением - в отличие от таблиц и представлений, курсор не считается частью БД; его содержимое и само определение действительно только в текущем сеансе работы и "теряется" немедленно по его закрытии.


CREATE CURSOR имя_курсора

(список_описания_полей_курсора)


где описание поля курсора имеет вид

(имя_поля тип_поля [(ширина_поля [, точностьe])

^ [NULL | NOT NULL]

[CHECK Правило_корректности_поля

[ERROR Текст_сообщения_о_нарушении_правила]]

[DEFAULT значение_по_умолчанию]

[UNIQUE]

См. описание опций в команде CREATE TABLE.


Поскольку курсоры не считаются неотъемлемой частью SQL, мы снова отошлем к документации любознательного читателя, интересующегося деталями обработки курсоров в FoxPro.


^ КОМАНДЫ ПОДДЕРЖКИ ТРАНЗАКЦИЙ


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


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


Начало транзакции оформляется командой SQL


^ BEGIN TRANSACTION


и закачивается либо командой корректного завершения транзакции


END TRANSACTION


либо командой "отката", т.е. возврата к состоянию БД к моменту начала транзакции


ROLLBACK


FoxPro поддерживает до 5 уровней вложенности транзакций. Однако, поскольку другие пользователи сети не имеют доступа к записи таблиц БД, модифицируемым во время исполнения транзакции, необходимо минимизировать время ее выполнения.


Некоторые команды - в основном, это команды модификации структуры БД (такие, например, как ALTER TABLE и CREATE TABLE) не могут быть включены в транзакцию - см. документацию.

1   2   3   4   5



Схожі:

Н. Р. Бухараев Введение в программирование на sql в среде субд ms visual FoxPro iconПрограммирование
Введение в программирование на языке Pascal. Программа. Структура программы. Идентификатор. Правила записи идентификатора. Блок описаний....
Н. Р. Бухараев Введение в программирование на sql в среде субд ms visual FoxPro iconЯзык разметки xml. Назначение, возможности, перспективы
Сравнительная характеристика субд mysql и ms sql для задач управлениея контентом
Н. Р. Бухараев Введение в программирование на sql в среде субд ms visual FoxPro iconБази даних в інформаційних системах
БД) на електронних носіях. Для подальшого перетворення, передачі та використання бд застосовують спеціальні програми – системи управління...
Н. Р. Бухараев Введение в программирование на sql в среде субд ms visual FoxPro iconПрограммирование на языке Паскаль Введение

Н. Р. Бухараев Введение в программирование на sql в среде субд ms visual FoxPro iconЛабораторная работа №4 Введение в Visual Prolog
Он особенно хорошо приспособлен для решения проблем, которые касаются объектов и отношений между объектами
Н. Р. Бухараев Введение в программирование на sql в среде субд ms visual FoxPro iconПрактикум по субд access 97. Введение. Сбором и накоплением данных, их корректировкой и сортировкой, отбором
Особенно это актуально для тех, кто работает в информационной сфере производства, где основным сырьем и продуктом
Н. Р. Бухараев Введение в программирование на sql в среде субд ms visual FoxPro iconПриложение 6 к приказу Министерства образования
...
Н. Р. Бухараев Введение в программирование на sql в среде субд ms visual FoxPro iconПрактична робота № Програмування лінійних обчислювальних процесів
Запустити Visual Basic. Після запуску Visual Basic на екрані з'явиться діало-гове вікно, у якому можна вибрати тип додатку. Вибираємо...
Н. Р. Бухараев Введение в программирование на sql в среде субд ms visual FoxPro iconДокументи
1. /САПР/КИБЕРНЕТИКА.docx
2. /САПР/Л 01 Основн_...

Н. Р. Бухараев Введение в программирование на sql в среде субд ms visual FoxPro iconVisual Basic Основы работы с базами данных
Умение обращаться с файлами данных чуть ли не одна из самых важных ступений в обучении программированию на Visual Basic! Здесь я...
Додайте кнопку на своєму сайті:
Документи


База даних захищена авторським правом ©te.zavantag.com 2000-2017
При копіюванні матеріалу обов'язкове зазначення активного посилання відкритою для індексації.
звернутися до адміністрації
Документи