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 类型,将忽略 nFieldWidthnPrecisionnPrecision 默认为零, (没有小数位) 如果 B、F 或 N 类型不包含 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 可以是用户定义的函数。 每当追加空白记录时,将检查验证规则。 如果验证规则不允许在追加的记录中使用空白字段值,则会生成错误。

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

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

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

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

注意

(在 CREATE TABLE 或 ALTER TABLE 中包含 UNIQUE 选项创建的候选索引 - SQL) 与使用 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 和第二个备注字段 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 个字符。

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

UNIQUE eExpression3TAG TagName3
创建候选索引。 eExpression3 指定表中的任意字段或字段组合。 但是,如果使用 PRIMARY KEY 选项之一创建了主索引,则不能包含为主索引指定的字段。 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]
指定表验证规则。 错误 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]

[,column-identifier 数据类型

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

(FieldName1FieldType

[ (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 命令