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

4.2. Вопросы для защиты

1. Перечислите типы основных файлов СУБД.

2. Укажите особенности команд DIR, LIST FILES и DISPLAY FILES.

3. Укажите особенности команд копирования COPY TO и COPY STRUCTURE.

4. Поясните процедуру модификации структуры таблицы при изменении типов и имен двух полей.

5. Поясните возможные варианты использования команд APPEND и APPEND FROM.

6. Как можно подключить индексные файлы к основному файлу базы данных и какими командами ?

7. Укажите достоинства и недостатки сортировки и индексирования таблиц.

8. Поясните использование команд FIND и SEEK в индексированных таблицах.

Лабораторная работа 3 язык запросов sql субд Visual FoxPro

Целью работы является изучения языка SQL ( Structured Query Language ).

1. Основные положения

Visual FoxPro поддерживает команды языка SQL - языка запросов баз данных и программирования.

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

SELECT - SQL - задает критерии, по которым составляется запрос, и выдает сам запрос. Visual FoxPro интерпретирует запрос и извлекает требуемые данные из таблиц(ы). Команда SELECT встроена в Visual FoxPro, как любая другая команда Visual FoxPro. Вы можете создать запрос в виде команды SELECT несколькими способами:

· В окне команд.

· В программе Visual FoxPro (использующей команду SELECT, как любую другую команду Visual FoxPro).

· В конструкторе запросов.

ALTER TABLE - SQL - модифицирует существующую таблицу. Вы можете для каждого поля в таблице изменить имя, тип, точность, масштаб, поддержку значений NULL и правила ссылочной целостности.

CREATE CURSOR - SQL - создает временную таблицу. Для каждого поля во временной таблице определяются имя, тип, точность, масштаб, поддержка значений NULL и правила ссылочной целостности. Эти определения можно получить как из самой команды, так и из массива.

CREATE TABLE -SQL - создает таблицу. Для каждого нового поля таблицы определяются имя, тип, точность, масштаб, поддержка значений NULL и правила ссылочной целостности. Эти определения можно получить как из самой команды, так и из массива.

DELETE - SQL - помечает табличные записи на удаление, используя синтаксис SQL.

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

UPDATE - SQL - обновляет записи в таблице. Записи можно обновлять на основе результатов оператора SELECT - SQL.

Команда CREATE DATABASE

- создает базу данных и открывает ее.

CREATE DATABASE [DatabaseName | ?]

Параметры

DatabaseNam- задает имя создаваемой базы данных.

Файл базы данных имеет расширение имени .DBC. Поскольку команда CREATE DATABASE сама открывает базу данных после ее создания, не нужно дополнительно выдавать команду OPEN DATABASE.

Если команда CREATE DATABASE выдана без каких-либо необязательных аргументов, на экране появляется диалоговое окно Create, позволяющее задать имя базы данных.

Команда CREATE TABLESQL

- создает таблицу, имеющую указанные поля.

Синтаксис

CREATE TABLE | DBF TableName1 [NAME LongTableName] [FREE]

(FieldName1 FieldType [(nFieldWidth [, nPrecision])]

[NULL | NOT NULL]

[CHECK lExpression1 [ERROR cMessageText1]]

[DEFAULT eExpression1]

[PRIMARY KEY | UNIQUE]

[REFERENCES TableName2 [TAG TagName1]]

[, FieldName2 ...]

[, PRIMARY KEY eExpression2 TAG TagName2

|, UNIQUE eExpression3 TAG TagName3]

[, FOREIGN KEY eExpression4 TAG TagName4 [NODUP]

REFERENCES TableName3 [TAG TagName5]]

[, CHECK lExpression2 [ERROR cMessageText2]])

| FROM ARRAY ArrayName

Параметры

CREATE TABLE | DBF TableName1 - задает имя создаваемой таблицы. Опции TABLE и DBF идентичны.

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

Длинное имя может содержать до 128 символов и применяться вместо коротких имен файлов в базах данных.

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

(FieldName1 FieldType [(nFieldWidth [, nPrecision])] - задает соответственно имя поля, его тип, ширину и точность (число десятичных знаков).

В следующей таблице перечислены значения, используемые в качестве FieldType, и указывается, необходимо ли при этом задавать nFieldWidth и nPrecision.

FieldType nFieldWidth nPrecision Описание типа данных

C n - Символьное поле ширины n

D - - Дата

T - - Тип DateTime

N n d Числовое поле ширины n, содержащее d десятичных знаков

F n d Плавающее числовое поле ширины n, содержащее d десятичных знаков

I - - Целочисленное

B - d Двойной

Y - - Тип Currency

L - - Логический

M - - Memo

G - - General

Для типов D, T, I, Y, L, M, G и P аргументы nFieldWidth и nPrecision игнорируются. Если для типа N, F или B параметр nPrecision не задан, его значение по умолчанию принимается равным нулю (нет десятичных знаков).

NULL - разрешает иметь в поле значения NULL.

NOT NULL - запрещает значения NULL в поле.

Если опущены параметры NULL и NOT NULL, то допустимость значений NULL в поле определяется текущей установкой SET NULL. Однако если вы, опустив NULL и NOT NULL, включили предложение PRIMARY KEY или UNIQUE, текущая установка SET NULL игнорируется и для данного поля по умолчанию принимается опция NOT NULL.

CHECK lExpression1 - задает правило для поля.

ERROR cMessageText1- задает текст сообщения об ошибке, которое Visual FoxPro выдает при нарушении правила поля. Это сообщение выдается только в том случае, когда происходит изменение данных в окне просмотра или в окне редактирования.

DEFAULT eExpression1 - задает значение, принимаемое в поле по умолчанию. Тип данных выражения eExpression1 должен совпадать с типом данных поля.

PRIMARY KEY - создает для поля первичный индекс. Тег первичного индекса имеет то же имя, что и поле.

UNIQUE - создает индекс-кандидат для поля. Имя тега индекса-кандидата совпадает с именем поля. Индексы-кандидаты (создаваемые с помощью опции UNIQUE команды CREATE TABLE или ALTER TABLE - SQL) отличаются от индексов, создаваемых с помощью опции UNIQUE команды INDEX. В индексе, созданном по команде INDEX с опцией UNIQUE, разрешены повторяющиеся ключи индекса; в индексах-кандидатах повторение ключей индекса запрещено.

В поле, используемом для первичного индекса или для индекса-кандидата, не допускаются значения NULL и повторяющиеся записи. Однако если вы создали первичный индекс или индекс-кандидат для поля, поддерживающего значения NULL, Visual FoxPro не будет генерировать ошибку. Ошибка будет сгенерирована в том случае, когда вы попытаетесь ввести в поле, используемое для первичного индекса или индекса-кандидата, значение NULL или повторяющееся значение.

REFERENCES TableName2 [TAG TagName1] - задает родительскую таблицу, с которой устанавливается постоянное отношение. Если опустить аргумент TAG TagName1, отношение устанавливается на основе ключа первичного индекса родительской таблицы. Если родительская таблица не имеет первичного индекса, Visual FoxPro генерирует ошибку.

Задав TAG TagName1, вы установите отношение на базе существующего тега индекса родительской таблицы. Имя тега индекса может включать до 10 символов.

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

PRIMARY KEY eExpression2 TAG TagName2 - задает первичный индекс, который предстоит создать. Выражение eExpression2 задает произвольное поле или комбинацию полей таблицы. TAG TagName2 задает имя создаваемого тега первичного индекса. Имя тега индекса может включать до 10 символов.

Поскольку таблица может иметь только один первичный индекс, вы не можете задавать это предложение, если уже создали для данного поля первичный индекс. Visual FoxPro сгенерирует ошибку, если в команду CREATE TABLE включено более одного предложения PRIMARY KEY.

UNIQUE eExpression3 TAG TagName3 - создает индекс-кандидат. Выражение eExpression3 задает произвольное поле или комбинацию полей таблицы. Однако если вы создали первичный индекс с помощью одной из опций PRIMARY KEY, вы не сможете использовать поле, заданное для первичного индекса. TAG TagName3 определяет имя создаваемого тега индекса-кандидата. Имя тега индекса может включать до 10 символов.

У таблицы может быть несколько индексов-кандидатов.

FOREIGN KEY eExpression4 TAG TagName4 [NODUP] - создает внешний (отличный от первичного) индекс и устанавливает отношение с родительской таблицей. eExpression4 задает выражение ключа внешнего индекса, а TagName4 ѕ имя создаваемого тега ключа внешнего индекса. Имя тега индекса может включать до 10 символов. Чтобы создать внешний индекс-кандидат, укажите ключевое слово NODUP.

Вы можете создать для таблицы несколько внешних индексов, но при этом все выражения внешних индексов должны задавать разные поля в таблице.

REFERENCES TableName3 [TAG TagName5] - задает родительскую таблицу, с которой устанавливается постоянное отношение. Задав TAG TagName5, вы установите отношение на базе тега индекса родительской таблицы. Имя тега индекса может включать до 10 символов. Если опустить TAG TagName5, отношение по умолчанию устанавливается с использованием ключа первичного индекса родительской таблицы.

CHECK eExpression2 [ERROR cMessageText2] - задает правило таблицы. ERROR cMessageText2 задает сообщение об ошибке, которое Visual FoxPro выдает при выполнении правила таблицы. Это сообщение выдается только в том случае, когда происходит изменение данных в окне просмотра или в окне редактирования.

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

Новая таблица открывается в рабочей области с наименьшим из имеющихся номеров; к этой таблице можно обращаться по псевдониму. Новая таблица открывается для монопольного пользования, независимо от текущей установки SET EXCLUSIVE.

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

Если база данных открыта, то для команды CREATE TABLE - SQL требуется монопольное пользование этой базой данных. Чтобы открыть базу данных в монопольном режиме, включите предложение EXCLUSIVE в команду OPEN DATABASE.

Если в момент создания новой таблицы нет открытой базы данных, то включение предложения NAME, CHECK, DEFAULT, FOREIGN KEY, PRIMARY KEY или REFERENCES вызовет ошибку.

Заметьте, что в синтаксисе команды CREATE TABLE для разделения определенных опций использованы запятые. Кроме того, предложения NULL, NOT NULL, CHECK, DEFAULT, PRIMARY KEY и UNIQUE должны помещаться внутри скобок, содержащих определения столбцов.

Команда ALTER TABLESQL

- заданным образом модифицирует структуру таблицы.

Синтаксис

ALTER TABLE TableName1

ADD | ALTER [COLUMN] FieldName1

FieldType [(nFieldWidth [, nPrecision])]

[NULL | NOT NULL]

[CHECK lExpression1 [ERROR cMessageText1]]

[DEFAULT eExpression1]

[PRIMARY KEY | UNIQUE]

[REFERENCES TableName2 [TAG TagName1]]

- Или -

ALTER TABLE TableName1

ALTER [COLUMN] FieldName2

[NULL | NOT NULL]

[SET DEFAULT eExpression2]

[SET CHECK lExpression2 [ERROR cMessageText2]]

[DROP DEFAULT]

[DROP CHECK]

- Или -

ALTER TABLE TableName1

[DROP [COLUMN] FieldName3]

[SET CHECK lExpression3 [ERROR cMessageText3]]

[DROP CHECK]

[ADD PRIMARY KEY eExpression3 TAG TagName2]

[DROP PRIMARY KEY]

[ADD UNIQUE eExpression4 [TAG TagName3]]

[DROP UNIQUE TAG TagName4]

[ADD FOREIGN KEY [eExpression5] TAG TagName4

REFERENCES TableName2 [TAG TagName5]]

[DROP FOREIGN KEY TAG TagName6 [SAVE]]

[RENAME COLUMN FieldName4 TO FieldName5]

[NOVALIDATE]

Параметры

TableName1 - задает имя таблицы, структура которой модифицируется.

ADD [COLUMN] FieldName1 - задает имя добавляемого поля.

ALTER [COLUMN] FieldName1 - задает имя существующего поля, подлежащего модификации.

В поле, используемом для первичного индекса или индекса-кандидата, не допускаются значения NULL и повторяющиеся записи.

Если вы создаете новое поле с помощью предложения ADD COLUMN, то при создании первичного индекса или индекса-кандидата для поля, поддерживающего значения NULL, Visual FoxPro не будет генерировать ошибку. Однако если вы попытаетесь ввести значение NULL или дубликат в поле, используемое для первичного индекса или индекса-кандидадата, Visual FoxPro выдаст ошибку.

Если вы модифицируете существующее поле, а выражение первичного индекса или индекса-кандидата состоит только из имени одного этого поля, Visual FoxPro проверит поле - не содержит ли оно значений NULL или повторяющихся записей. Если такие значения будут обнаружены, Visual FoxPro сгенерирует ошибку и таблица остается без изменений. Если выражение индекса содержит несколько полей или выражение, включающее одиночное поле, Visual FoxPro не будет проверять наличие значений NULL или дублирующих записей.

ALTER [COLUMN] FieldName2 - задает имя существующего поля, которое предстоит модифицировать.

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

SET CHECK lExpression2 - задает новое правило для существующего поля. Вычисление lExpression2 должно давать логическое значение; это может быть определенная пользователем функция или хранимая процедура.

ERROR cMessageText2 - задает текст сообщения об ошибке. Это сообщение будет отображаться при обнаружении ошибки в соответствии с правилом уровня поля. Сообщение выдается только в том случае, когда происходит изменение данных в окне просмотра или окне редактирования.

DROP DEFAULT - отменяет значение, принимаемое по умолчанию для существующего поля.

DROP CHECK - отменяет правило для существующего поля.

DROP [COLUMN] FieldName3 - задает поле, которое нужно удалить из таблицы. При удалении поля из таблицы также отменяется значение, принимаемое по умолчанию для этого поля.

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

DROP CHECK - отменяет правило уровня таблицы.

ADD PRIMARY KEY eExpression3 TAG TagName2 - добавляет в таблицу первичный индекс. eExpression3 задает выражение ключа первичного индекса, а TagName2 ѕ имя тега первичного индекса. Имя тега индекса может содержать не более 10 символов. Если TAG TagName2 опущено, а eExpression3 определяет одно поле, тег первичного индекса получает то же имя, что и поле, заданное в выражении eExpression3.

DROP PRIMARY KEY - удаляет первичный индекс и его тег. Поскольку таблица может иметь только один первичный ключ, его имя можно не указывать. При удалении первичного индекса удаляются и все постоянные отношения, основанные на первичном ключе.

ADD UNIQUE eExpression4 [TAG TagName3] - добавляет в таблицу индекс-кандидат. eExpression4 задает выражение ключа индекса-кандидата, а TagName3 ѕ имя тега индекса-кандидата. Имя тега индекса может содержать не более 10 символов. Если выражение TAG TagName3 опущено, а eExpression4 определяет одно поле, тег индекса-кандидата получает то же имя, что и поле, заданное в выражении eExpression4.

DROP UNIQUE TAG TagName4 - удаляет индекс-кандидат и его тег. Поскольку таблица может иметь несколько ключей-кандидатов, необходимо задать имя удаляемого тега индекса-кандидата.

ADD FOREIGN KEY [eExpression5] TAG TagName4 - добавляет в таблицу внешний (отличный от первичного) индекс. eExpression5 задает выражение ключа внешнего индекса, а TagName4 ѕ имя тега внешнего индекса. Имя тега индекса может содержать не более 10 символов.

REFERENCES TableName2 [TAG TagName5] - задает родительскую таблицу, с которой устанавливается постоянное отношение. Чтобы установить отношение с родительской таблицей на базе тега существующего индекса, следует указать TAG TagName5. Если TAG TagName5 опущено, отношение устанавливается с помощью тега первичного индекса родительской таблицы.

DROP FOREIGN KEY TAG TagName6 [SAVE] - удаляет внешний ключ, у которого тег индекса имеет имя TagName6. Если опустить SAVE, тег индекса будет удален из структурного индекса. Включив SAVE, вы предотвратите удаление тега из структурного индекса.

RENAME COLUMN FieldName4 TO FieldName5 - позволяет изменять имя поля в таблице. FieldName4 задает имя поля, которое следует изменить. FieldName5 задает новое имя поля. Будьте осторожны при переименовании полей таблиц ѕ выражения индекса, правила проверки достоверности полей и таблиц, команды, функции и т.п. могут продолжать ссылаться на старые имена полей.

NOVALIDATE - указывает, что Visual FoxPro допускает внесение изменений в структуру таблицы, которые могут нарушить целостность табличных данных. По умолчанию Visual FoxPro запрещает команде ALTER TABLE вносить в структуру подобные разрушающие изменения. Включение опции NOVALIDATE позволяет снять этот запрет.

Если вы модифицировали правила полей или таблицы в таблице, имеющей записи, Visual FoxPro проведет тестирование новых правил на существующих данных и выдаст предупреждение при первом нарушении правила или триггера.

Если модифицируемая таблица принадлежит базе данных, то для работы команды ALTER TABLE - SQL необходимо, чтобы эта база данных была открыта для монопольного пользования. Чтобы открыть базу данных для монопольного пользования, включите предложение EXCLUSIVE в команду OPEN DATABASE.

Команда INSERTSQL

Добавляет запись в конец таблицы, содержащей заданные значения полей.

Синтаксис

INSERT INTO dbf_name [(fname1 [, fname2, ...])]

VALUES (eExpression1 [, eExpression2, ...])

- Или -

INSERT INTO dbf_name FROM ARRAY ArrayName | FROM MEMVAR

Параметры

INSERT INTO dbf_name - задает имя таблицы, к которой добавляется новая запись. Имя dbf_name может включать путь и может быть выражением имени.

Если заданная таблица не открыта, она открывается в новой рабочей области для монопольного использования и новая запись добавляется к ней. Новая рабочая область не выбирается; выбранной остается текущая рабочая область.

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

[(fname1 [, fname2 [, ...]])] - задает имена полей в новой записи, в которые вставляются значения.

VALUES (eExpression1 [, eExpression2 [, ...]]) - задает значения полей, вставляемые в новую запись. Если имена полей опущены, нужно задавать значения полей в порядке, определяемом структурой таблицы.

FROM ARRAY ArrayName - задает массив, из которого в новую запись вставляются данные. Содержимое всех элементов массива, начиная с первого, вставляется в соответствующие поля записи. Содержимое первого элемента массива вставляется в первое поле новой записи; содержимое второго элемента вставляется во второе поле и т.д.

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

Новая запись содержит данные, приведенные в предложении VALUES или содержащиеся в заданном массиве или в переменных памяти. Указатель записи устанавливается на новой записи.

Команда UPDATESQL

Обновляет записи в таблице актуальными значениями.

Синтаксис

UPDATE [DatabaseName1!]TableName1

SET Column_Name1 = eExpression1

[, Column_Name2 = eExpression2 ...]

WHERE FilterCondition1 [AND | OR FilterCondition2 ...]]

Параметры

UPDATE [DatabaseName1!]TableName1 - задает таблицу, в которой необходимо обновить записи.

Аргумент DatabaseName1! задает имя содержащей таблицу базы данных, отличной от текущей. Это имя необходимо указывать, когда база данных, которой принадлежит таблица, не является текущей. Между именем базы данных и именем таблицы поставьте разделитель ѕ восклицательный знак (!).

SET Column_Name1 = eExpression1

[, Column_Name2 = eExpression2] - задает обновляемые столбцы и их новые значения. Если предложение WHERE опущено, каждая строка одного столбца обновляется одним и тем же значением.

WHERE FilterCondition1 [AND | OR FilterCondition2 ...]] - определяет, какие записи следует обновлять.

Условие FilterCondition задает критерий, которому должны удовлетворять обновляемые записи. Можно включить сколько угодно условий фильтрования, объединяя их операторами AND и OR. Можно также использовать оператор NOT, инвертирующий значение логического выражения, и функцию EMPTY( ), проверяющую, является ли поле пустым.

Команда UPDATE - SQL может обновлять записи только в одной таблице.

Команда DELETESQL

Помечает записи на удаление.

Синтаксис

DELETE FROM [DatabaseName!]TableName

[WHERE FilterCondition1 [AND | OR FilterCondition2 ...]]

Параметры

FROM [DatabaseName!]TableName - задает таблицу, в которой записи помечаются на удаление.

Аргумент DatabaseName! задает имя содержащей таблицу базы данных, отличной от текущей. Это имя необходимо задавать, когда база данных, содержащая таблицу, не является текущей. Между именем базы данных и именем таблицы нужно поставить разделитель ѕ восклицательный знак (!).

WHERE FilterCondition1 [AND | OR FilterCondition2 ...] - указывает, что Visual FoxPro помечает на удаление только определенные записи.

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]