Новости



Visual FoxPro 9 позволяет создавать ещё более производительные приложения баз данных.
Двадцатиление FoxPro! Microsoft принимает поздравления.
Visual FoxPro Toolkit for .NET - более 225 функций VFP 7.0, для языков .NET (подробнее)

Команда ALTER TABLE - SQL

См. также

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

Синтаксис

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]]
[NOCPTRANS]
fox90002.gif Или fox90002.gif
ALTER TABLE TableName1
ALTER [COLUMN] FieldName2
[NULL | NOT NULL]
[SET DEFAULT eExpression2]
[SET CHECK lExpression2 [ERROR cMessageText2]]
[DROP DEFAULT]
[DROP CHECK]
fox90002.gif Или fox90002.gif
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

Задает имя существующего поля, подлежащего модификации.

FieldType [(nFieldWidth [, nPrecision]])

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

FieldType fox90001.gif это одна буква, указывающая тип данных поля. Для некоторых типов полей тре уется задавать 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

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

NULL | NOT NULL

Позволяет или запрещает полю принимать значения NULL.

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

CHECK lExpression1

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

ERROR cMessageText1

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

DEFAULT eExpression1

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

PRIMARY KEY

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

UNIQUE

Создает тег индекса-кандидата с тем же именем, которое носит поле. Подробнее о индексах-кандидатах см. главу 7 "Работа с таблицами" Руководства разработчика.

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

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

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

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

REFERENCES TableName2 TAG TagName1

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

NOCPTRANS

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

В следующем примере создается таблица с именем MYTABLE, которая содержит два символьных поля и два memo-поля. Второе символьное поле char2 и второе memo-поле memo2 определены с опцией NOCPTRANS для предотвращения трансляции.

CREATE TABLE mytable (char1 C(10), char2 C(10) NOCPTRANS,;
memo1 M, memo2, M NOCPTRANS)

ALTER [COLUMN] FieldName2

Задает имя существующего поля, которое предстоит модифицировать.

SET DEFAULT eExpression2

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

SET CHECK lExpression2

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

ERROR cMessageText2

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

DROP DEFAULT

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

DROP CHECK

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

DROP [COLUMN] FieldName3

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

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

SET CHECK lExpression3

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

ERROR cMessageText3

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

DROP CHECK

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

ADD PRIMARY KEY eExpression3 TAG TagName2

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

DROP PRIMARY KEY

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

ADD UNIQUE eExpression4 [TAG TagName3]

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

DROP UNIQUE TAG TagName4

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

ADD FOREIGN KEY [eExpression5] TAG TagName4

Добавляет в таблицу внешний (отличный от первичного) индекс. eExpression5 задает выражение ключа внешнего индекса, а TagName4 fox90001.gif имя тега внешнего индекса. Имя тега индекса может содержать не более 10 симво ов.

REFERENCES TableName2 [TAG TagName5]

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

DROP FOREIGN KEY TAG TagName6 [SAVE]

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

RENAME COLUMN FieldName4 TO FieldName5

Позволяет изменять имя поля в таблице. FieldName4 задает имя поля, которое следует изменить. FieldName5 задает новое имя поля.

Внимание Будьте осторожны при переименовании полей таблиц fox90001.gif выражения индекса, правила проверки достоверности полей и таблиц, команды, фу кции и т.п. могут продолжать ссылаться на старые имена полей.

NOVALIDATE

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

Комментарии

С помощью команды ALTER TABLE можно модифицировать структуру таблицы, не вк юченной в базу данных. Однако если при модификации свободной таблицы используются предложения DEFAULT, FOREIGN KEY, PRIMARY KEY, REFERENCES или SET, Visual FoxPro сгенерирует ошибку.

Команда ALTER TABLE может перестроить таблицу, создав новый заголовок таблицы и добавив к нему записи. Например, таблица может быть перестроена в результате изменения типа или ширины поля.

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

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

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

Примеры

* Пример 1 добавляет поле fax в таблицу customer, причем в поле
* разрешены значения NULL.

Пример 2 определяет поле cust_id в качестве первичного ключа
* таблицы
customer.

Пример 3 добавляет в поле quantity таблицы orders правило,
* требующее, чтобы значения этого поля были неотрицательными.

Пример 4 добавляет постоянное отношение один-ко-многим между
*таблицами
customer и orders, основанное на первичном ключе
*
cust_id в таблице customer и новом внешнем ключе cust_id
* в таблице
orders.

Пример 5 удаляет правило из поля quantity в таблице orders.

Пример 6 удаляет постоянное отношение между таблицами customer и
*
orders, сохраняя тег индекса cust_id в таблице orders.

* Example 1

SET PATH TO (HOME( ) + 'samples\data\') && Sets path to table
ALTER TABLE customer ADD COLUMN fax c(20) NULL

* Example 2

ALTER TABLE customer ADD PRIMARY KEY cust_id TAG cust_id

ALTER TABLE customer ALTER COLUMN cust_id c(5) PRIMARY KEY

* Example 3

ALTER TABLE orders;

ALTER COLUMN quantity SET CHECK quantity >= 0;

ERROR "Quantities must be non-negative"

* Example 4

ALTER TABLE orders;

ADD FOREIGN KEY cust_id TAG cust_id REFERENCES customer

* Example 5

ALTER TABLE orders ALTER COLUMN quantity DROP CHECK

* Example 6

ALTER TABLE orders DROP FOREIGN KEY TAG cust_id SAVE



Новое на сайте

  • Обновлен портфель программиста

    Добавлены: Установка HTML Help (Создание справочной системы), Imagedit.zip - Графический редактор ( ico и bmp), Библиотека локализации HTML Help (Русский)
  • Новые примеры программ

    Установка библиотек, Игровая программа "Охота на лис", Установка библиотек "Охота на лис", plastic -"Платежки", Библиотеки (на FPD26), platan -"Платежки" (на Clipper 5.2)
  • Обновленна справка

    Подсказки, технология программирования и использование Visual FoxPro. Команды, функции, операторы, объекты, свойства, события и методы.