Создает таблицу, с использованием указанных полей или массива.

CREATE TABLE | DBF TableName1 [NAME LongTableName] [FREE] 
    [CODEPAGE = nCodePage]
    ( FieldName1 FieldType [( nFieldWidth [, nPrecision] )] [NULL | NOT NULL] 
    [CHECK lExpression1 [ERROR cMessageText1]] 
    [AUTOINC [NEXTVALUE NextValue [STEP StepValue]]] [DEFAULT eExpression1] 
    [PRIMARY KEY | UNIQUE [COLLATE cCollateSequence]] 
    [REFERENCES TableName2 [TAG TagName1]] [NOCPTRANS]
    [, FieldName2 ... ] 
    [, PRIMARY KEY eExpression2 TAG TagName2 |, UNIQUE eExpression3 TAG TagName3 
[COLLATE cCollateSequence]]
    [, FOREIGN KEY eExpression4 TAG TagName4 [NODUP] 
    [COLLATE cCollateSequence] 
    REFERENCES TableName3 [TAG TagName5]] [, CHECK lExpression2 [ERROR cMessageText2]] ) 
    | FROM ARRAY ArrayName

Параметры

CREATE TABLE | DBF TableName1

Создает таблицу или .dbf. Параметр TableName1 указывает имя таблицы. Опции TABLE и DBF идентичны.

nCodePage

Указывает кодовую страницу, которая будет использоваться для вновь создаваемой таблицы. Список поддерживаемых кодовых страниц вы можете посмотреть в описании Кодовые страницы, поддерживаемые Visual FoxPro.

NAME LongTableName

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

FREE

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

FieldName1, FieldType, nFieldWidth,nPrecision

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

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

 
FieldType nFieldWidth nPrecision Data type

W, Blob

-

-

Blob

C, Char, Character

n

Поле Character длиной в n символов

Y, Currency

Currency

D, Date

Date

T, DateTime

DateTime

B, Double

d

Double

G, General

General

I, Int, Integer

Integer

L, Logical

Logical

M, Memo

Memo

N, Num, Numeric

n

d

Поле Numeric с длиной n и d десятичными местами

F, Float

n

d

Поле Numeric с плавающей запятой длиной n с d десятичными местами

Q, Varbinary

n

-

Поле Varbinary с длиной n

V, Varchar

n

-

Поле Varchar с длиной n

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

NULL | NOT NULL

Определяет - будут ли разрешены null-значения для хранения в поле. NULL разрешает хранение null-значений, а NOT NULL, соответственно, запрещает. Если одно или более полей могут хранить null-значения, максимальное число полей на таблицу ограничивается значением 254.

CHECK lExpression1

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

ERROR cMessageText1

Указывает сообщение об ошибке. Visual FoxPro будет отображать это сообщение, когда правило проверки, указанное в опции CHECK будет генерировать ошибку. Сообщение отображается только тогда, когда данные изменяются в окне Browse или окне Edit.

AUTOINC [NEXTVALUE NextValue [STEP StepValue]]

Разрешает автоувеличение для поля. NextValue указывает начальное значение и может представлять, как положительное, так и отрицательное значение, лежащее в диапазоне от -2,147,483,647 до 2,147,483,647. Значением по умолчанию является единица (1). Вы можете установить значение NextValue, используя счетчик Next Value на закладке Fields дизайнера таблиц.

StepValue указывает значение увеличения для поля и может быть положительным, ненулевым значением в диапазоне от 1 до 255. Значением по умолчанию является единица (1). Вы можете установить значение StepValue с помощью счетчика Step на закладке Fields дизайнера таблиц.

Значения автоувеличения не могут быть NULL.

NoteЗамечание

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

DEFAULT eExpression1

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

Если вы используете опцию AUTOINC, для включения возможности автоувеличения его значения, и указываете значение по умолчанию, Visual FoxPro будет хранить указанное вами значение по умолчанию, но не будет его использовать. Visual FoxPro будет использовать значение по умолчанию, если вы с помощью команды SQL ALTER TABLE снимите с поля возможность автоувеличения значений.

PRIMARY KEY | UNIQUE

PRIMARY KEY создает первичный индекс для поля, указанного в FieldName1. UNIQUE создает индекс-кандидат для поля, указанного в FieldName1. Первичный индексный тэг или тэг индекса-кандидата имеют тоже самое имя, что и имя поля. Для получения более подробной информации о первичных индексах и индексах-кандидатах смотри описание Типы индексов Visual FoxPro.

COLLATE cCollateSequence

Указывает последовательность сопоставления, если она отличается от значения по умолчанию - MACHINE. Параметр cCollateSequence должен быть допустимой последовательностью сопоставления, поддерживаемой Visual FoxPro.

NoteСовет

Вы, кроме того, можете использовоть команду SET COLLATE до создания индекса. Для получения более подробной информации об установке последовательности сопоставления (collation sequence) смотрите описания Оптимизация международных приложений и Команда SET COLLATE.

REFERENCES TableName2 [TAG TagName1]

Указывает родительскую таблицу, с которой устанавливается постоянное отношение (persistent relationship). Родительская таблицы не может быть свободной таблицей.

Параметр TagName1 определяет имя тэга для родительской таблицы, указанной в TableName2. Имена индексных тэгов могут иметь длину до 10 символов. Если вы опустите опцию TAG , то постоянное отношение устанавливается с использованием первичного индексного ключа родительской таблицы. Если родительская таблицы не имеет первичного индекса, то в таком случае Visual FoxPro сгенерирует ошибку.

NOCPTRANS

Предотвращает трансляцию в другую кодовую страницу для полей с типами Character, Memo и Varchar. Вы можете указать NOCPTRANS только для символьных и мемо полей. Это создает типы, которые появляются в виде Character (Binary), Memo (Binary) и Varchar (Binary) в дизайнере таблиц.

FieldName2 ...

Указывает одно или более полей с соответствующими аттрибутами.

PRIMARY KEY eExpression2 TAG TagName2

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

Параметр TagName2 указывает имя для первичного индексного тэга в выражении eExpression2. Имена индексных тэгов могут иметь длину до 10 символов.

UNIQUE eExpression3 TAG TagName3

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

Параметр TagName3 указывает имя для тэга индекса-кандидата в eExpression3. Имена индексных тэгов могут иметь длину до 10 символов.

FOREIGN KEY eExpression4 TAG TagName4 [ NODUP ]

Создает внешний (foreign (non-primary)) индекс, указанного выражения индексного ключа, и установливает отношение к родительской таблице. Вы можете создать множество внешних ключей для таблицы, но выражение внешнего индексного ключа, в таком случае, должно указывать разные поля в таблице.

Параметр TagName4 указывает имя для тэга внешнего индексного ключа. Имена индексных тэгов могут иметь длину до 10 символов.

NODUP создает внешний инедкс-кандидат.

REFERENCES TableName3 TAG TagName5

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

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

CHECK lExpression2

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

ERROR cMessageText2

Указывает сообщение об ошибке для правила проверки таблицы в lExpression2. Visual FoxPro будет отображать это сообщение, когда правило проверки сгенерирует ошибку. Сообщение отображается только при изменении данных внутри окна Browse или окна Edit.

FROM ARRAY ArrayName

Указывает имя существующего массива, содержание которого составляют имя, тип, точность и диапазон для каждого поля в таблице. Вы можете использовать опцию FROM ARRAY вместо указания индвидуальных полей в предложении SQL CREATE TABLE. Для просмотра соответствующиего формата массива обратитесь к описанию функции AFIELDS().

Автоувеличение значений поля включается при указании значения StepValue большего, чем 0.

Expand imageПримечания

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

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

Если таблица конвертируется в другую кодовую странцу, поля, для которых установлен признак NOCPTRANS, не транслируются.

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

Таблицы, созданные в Visual FoxPro OLE DB Provider с использованием команды CREATE TABLE размещаются в каталоге, используемом по умолчанию вызывающим приложением, если вы не указали для них другого местонахождения.

NoteЗамечание

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

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

Visual FoxPro сгенерирует ошибку, если правило проверки, определенное в опции CHECK не позволяет вводит пустые значения полей в добавляемой записи.

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

NoteЗамечание

Индексы-кандидаты, которые вы создали включением в команду опции UNIQUE, которые предоставлены для совместимости с ANSI, в командах SQL CREATE TABLE или ALTER TABLE не являются теми же самыми индексами, создаваемыми командой INDEX с опцией UNIQUE. Индекс, созданный командой INDEX, использующей опцию UNIQUE позволяет дублирующие индексные ключи; в то время как индексы-кандидаты не позволяют их. Для получения более подробной информации об опции UNIQUE в команде INDEX смотрите ее описание в INDEX. Термин CANDIDATE является синонимом UNIQUE и может быть использовать вместо последнего по вашему выбору.

Для NextValue пустое значение интерпретируется, как 0 и вызывает автоувеличение, начиная с 0 + StepValue.

Значение увеличения StepValue всегда добавляется с положительным знаком. Если вы желаете использовать серии автоувеличений с отрицательным знаком, вы должны начать с отрицательной NextValue и шагать по направлении к 0, используя значение автоувеличения StepValue. Например, если NextValue равно -2147483647, первый шаг произведет значение -2147483646.

CREATE TABLE распознает все поля, доступные в функции AFIELDS( ) и включает автоувеличение в таблице, когда StepValue больше, чем нуль.

Expand imageПримеры

Пример 1

Приведенный ниже пример создает новую базу данных с именем MyData1 и использует команду CREATE TABLE для создания трех таблиц: Salesman, Customer и Orders. Опции FOREIGN KEY и REFERENCES во второй команде CREATE TABLE создают постоянное отношение "один-ко-многим" между таблицами Salesman и Customer. Опции DEFAULT в третьей команде CREATE TABLE устанавливают значения по умолчанию, а опции CHECK и ERROR устанавливают бизнес-правила для ввода данных в указанные поля. Команда MODIFY DATABASE отображает отношения между тремя таблицами.

  CopyCode imageСкопировать код
CLOSE DATABASES
CLEAR
CREATE DATABASE mydata1

* Создает таблицу Salesman с первичным ключом.
CREATE TABLE Salesman ;
   (SalesID c(6) PRIMARY KEY, ;
   SaleName Character(20))

* Создает таблицу Customer и связывает ее с таблицей Salesman.
CREATE TABLE Customer ;
   (SalesID c(6), ;
   CustId i PRIMARY KEY, ;
   CustName c(20) UNIQUE,   ;
   SalesBranch c(3), ;
   FOREIGN KEY SalesId TAG SalesId REFERENCES Salesman)

* Создает таблицу Orders связанную с Customer по ее собственному первичному
* ключу и некоторые бизнес-правила, такие как defaults и checks.
CREATE TABLE Orders ;
   (OrderId i PRIMARY KEY, ;
      CustId i REFERENCES customer TAG CustId, ;
      OrderAmt y(4), ;
      OrderQty i ;
      DEFAULT 10 ;
      CHECK (OrderQty > 9) ;
      ERROR "Количество в Order Quantity должно быть по-крайнеме мере равно 10", ;
         DiscPercent n(6,2) NULL ;
      DEFAULT .NULL., ;
      CHECK (OrderAmt > 0) ERROR "Количество Order Amount должно быть > 0" )

* Отображает новую базу данных, таблицы и отношения.
MODIFY DATABASE

* Удаляет файлы примера.
SET SAFETY OFF && Подавляет сообщение подтверждения.
CLOSE DATABASES     && Закрывает базу данных перед удалением.
DELETE DATABASE mydata1 DELETETABLES

Пример 2

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

  CopyCode imageСкопировать код
CREATE TABLE MyTable (char1 C(10), char2 C(10) NOCPTRANS,;
   memo1 M, memo2 M NOCPTRANS)

Пример 3

Приведенный ниже пример создает таблицу Customer с полем MyField, которое имеет тип Integer и использует автоувеличение значений поля:

  CopyCode imageСкопировать код
CREATE TABLE Customer (MyField i AUTOINC NEXTVALUE 1 STEP 1, name c(40) )

Expand image Смотрите также