Команда CREATE TABLE - SQL

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

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]]
		[NOCPTRANS]
	[, 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.

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
Задает правило для поля. В качестве lExpression1 можно указать пользовательскую функцию. Учтите, что правило проверяется и при присоединении пустой записи. Если данное правило не допускает пустые значения полей в присоединяемой записи, генерируется ошибка.
ERROR cMessageText1
Задает текст сообщения об ошибке, которое Visual FoxPro выдает при нарушении правила поля. Это сообщение выдается только в том случае, когда происходит изменение данных в окне просмотра или в окне редактирования.
DEFAULT eExpression1
Задает значение, принимаемое в поле по умолчанию. Тип данных выражения eExpression1 должен совпадать с типом данных поля.
PRIMARY KEY
Создает для поля первичный индекс. Тег первичного индекса имеет то же имя, что и поле.
UNIQUE
Создает индекс-кандидат для поля. Имя тега индекса-кандидата совпадает с именем поля. Подробнее о индексах-кандидатах см. тему Использование индексов и главу 7 "Работа с таблицами" Руководства разработчика.
Замечание. Индексы-кандидаты (создаваемые с помощью опции UNIQUE команды CREATE TABLE или ALTER TABLE - SQL) отличаются от индексов, создаваемых с помощью опции UNIQUE команды INDEX. В индексе, созданном по команде INDEX с опцией UNIQUE, разрешены повторяющиеся ключи индекса; в индексах-кандидатах повторение ключей индекса запрещено. Подробнее об опции UNIQUE см. тему INDEX.
В поле, используемом для первичного индекса или для индекса-кандидата, не допускаются значения NULL и повторяющиеся записи. Однако если вы создали первичный индекс или индекс-кандидат для поля, поддерживающего значения NULL, Visual FoxPro не будет генерировать ошибку. Ошибка будет сгенерирована в том случае, когда вы попытаетесь ввести в поле, используемое для первичного индекса или индекса-кандидата, значение NULL или повторяющееся значение.
REFERENCES TableName2 [TAG TagName1]
Задает родительскую таблицу, с которой устанавливается постоянное отношение. Если опустить аргумент TAG TagName1, отношение устанавливается на основе ключа первичного индекса родительской таблицы. Если родительская таблица не имеет первичного индекса, Visual FoxPro генерирует ошибку.
Задав 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)

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 должны помещаться внутри скобок, содержащих определения столбцов.

Пример:

* В следующем примере создается новая база данных Mydata1. Команда
* CREATE TABLE используется для создания двух таблиц, Salesman и
* Customer, которые автоматически включаются в базу данных.
* Предложения FOREIGN KEY и REFERENCE во второй команде CREATE
* TABLE создают постоянное отношение один-ко-многим между
* таблицами Salesman и Customer. Команда MODIFY DATABASE отображает
* данное отношение между таблицами.
CREATE DATABASE mydata1
CREATE TABLE salesman (SalesID c(6) PRIMARY KEY, SaleName C(20))
CREATE TABLE customer (SalesID  c(6), ;
	CustName c(20), 	SalesBranch c(3), ;
	FOREIGN KEY SalesId TAG SalesId REFERENCE SALESMAN)
MODIFY DATABASE

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 08.12.2002