CREATE TABLE - SQL 命令

创建具有指定字段的表。

Visual FoxPro ODBC 驱动程序支持此命令的本机 Visual FoxPro 语言语法。 有关特定于驱动程序的信息,请参阅 驱动程序备注

语法

  
CREATE TABLE | DBF TableName1 [NAME LongTableName] [FREE]  
   (FieldName1FieldType [(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 是一个字母,指示字段的 数据类型。 某些字段数据类型要求指定 nFieldWidthnPrecision 或两者兼有。

对于 D、G、I、L、M、P、T 和 Y 类型,将忽略 nFieldWidthnPrecision如果 B、F 或 N 类型不包含 nPrecision,则 nPrecision 默认为零(无小数位数)。

Null
允许字段中的 null 值。

NOT NULL
防止字段中的 null 值。

如果省略 NULL 和 NOT NULL,则 SET NULL 的当前设置确定字段中是否允许 NULL 值。 但是,如果省略 NULL 和 NOT NULL 并包含 PRIMARY KEY 或 UNIQUE 子句,则忽略 SET NULL 的当前设置,并且字段默认为 NOT NULL。

CHECK lExpression1
指定字段的验证规则。 lExpression1 可以是用户定义的函数。 每当追加空白记录时,将检查验证规则。 如果验证规则不允许追加记录中的空白字段值,则会生成错误。

ERROR cMessageText1
指定字段规则生成错误时显示的错误消息 Visual FoxPro。 仅当数据在“浏览”窗口或“编辑”窗口中更改时,才会显示该消息。

DEFAULT eExpression1
指定字段的默认值。 eExpression1数据类型必须与字段的数据类型相同。

PRIMARY KEY
为字段创建主索引。 主索引标记的名称与字段相同。

UNIQUE
为字段创建候选索引。 候选索引标记的名称与字段相同。

注意

候选索引(通过在 CREATE TABLE 或 ALTER TABLE - SQL 中包含 UNIQUE 选项创建)与在 INDEX 命令中使用 UNIQUE 选项创建的索引不同。 在 INDEX 命令中使用 UNIQUE 选项创建的索引允许重复索引键;候选索引不允许重复索引键。 有关其 UNIQUE 选项的其他信息,请参阅 INDEX

主索引或候选索引的字段中不允许使用 Null 值和重复记录。 但是,如果为支持 null 值的字段创建主索引或候选索引,Visual FoxPro 将不会生成错误。 如果尝试在用于主索引或候选索引的字段中输入 null 或重复值,Visual FoxPro 将生成错误。

REFERENCES TableName2[TAG TagName1]
指定建立持久关系的父表。 如果省略 TAG TagName1,则使用父表的主索引键建立关系。 如果父表没有主索引,Visual FoxPro 将生成错误。

包括 TAG TagName1 ,以基于父表的现有索引标记建立关系。 索引标记名称最多可以包含 10 个字符。

父表不能是可用表。

NOCPTRANS
防止将字符和备注字段转换为其他代码页。 如果表转换为另一个代码页,则未转换 NOCPTRANS 的字段。 只能为字符和备注字段指定 NOCPTRANS。

以下示例创建一个名为 mytable 的表,其中包含两个字符字段和两个备注字段。 第二个字符字段,char2 和第二个备注字段,备注 2,包括 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 个字符。

由于表只能有一个主索引,因此如果已为字段创建了主索引,则不能包含此子句。 如果在 CREATE TABLE 中包含多个 PRIMARY KEY 子句,Visual FoxPro 将生成错误。

UNIQUE eExpression3TAG TagName3
创建候选索引。 eExpression3 指定表中字段的任何字段或组合。 但是,如果已使用主键选项之一创建了主索引,则不能包含为主索引指定的字段。 TAG TagName3 为创建的候选索引标记指定标记名称。 索引标记名称最多可以包含 10 个字符。

表可以有多个候选索引。

FOREIGN KEY eExpression4TAG 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 需要独占使用数据库。 若要打开数据库以供独占使用,请在 OPEN DATABASE 中包含 EXCLUSIVE。

如果在创建新表时数据库未打开,包括 NAME、CHECK、DEFAULT、FOREIGN KEY、PRIMARY KEY 或 REFERENCES 子句将生成错误。

注意

CREATE TABLE 语法使用逗号分隔某些 CREATE TABLE 选项。 此外,NULL、NOT NULL、CHECK、DEFAULT、PRIMARY KEY 和 UNIQUE 子句必须放置在包含列定义的括号中。

驱动程序备注

当应用程序将 ODBC SQL 语句 CREATE TABLE 发送到数据源时,Visual FoxPro ODBC 驱动程序使用下表所示的语法将命令转换为 Visual FoxProCREATE TABLE 命令。

ODBC 语法 Visual FoxPro 语法
CREATE TABLE base-table-name

列标识符数据类型

[NOT NULL]

[,列标识符数据类型

[NOT NULL] ...)
CREATE TABLE TableName1 [NAME LongTableName]

FieldName1 FieldType

[(nFieldWidth [, nPrecision])]

[NOT NULL])

使用驱动程序创建表时,驱动程序会在创建后立即关闭该表,以允许其他用户访问该表。 这不同于 Visual FoxPro,它使表格在创建时以独占方式打开。 但是,如果数据源上包含 CREATE TABLE 语句的存储过程执行,该表将保持打开状态。

如果数据源是数据库(.dbc 文件),Visual FoxPro ODBC 驱动程序会创建一个名为 LongTableName 的表,其名称与 base-table-name 相同。

使用数据定义语言 (DDL)

不能在以下位置包括 DDL:

  • 在需要事务的批处理 SQL 语句中

  • 在手动提交模式下,在需要事务的语句之后,除非应用程序首先调用 SQLTransact

例如,如果要创建临时表,则应在开始需要事务的语句之前创建该表。 如果在需要事务的批处理 SQL 语句中包含 CREATE TABLE 语句,驱动程序将返回错误消息。

另请参阅

ALTER TABLE - SQL 命令
支持的数据类型(Visual FoxPro ODBC 驱动程序)
INSERT - SQL 命令
SELECT - SQL 命令