创建一个含有指定字段的表。
语法
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 | – | – | 日期时间型 |
N | n | d | 宽度为 n、有 d 位小数的数值型字段 |
F | n | d | 宽度为 n、有 d 位小数的浮点数值型字段 |
I | – | – | 整型 |
B | – | d | 双精度型 |
Y | – | – | 货币型 |
L | – | – | 逻辑型 |
M | – | – | 备注型 |
G | – | – | 通用型 |
nFieldWidth 和 nPrecision 不适用于 D、T、I、Y、L、M、G 和 P 类型。对于 N、F 或 B 类型,若不包含 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 和第二个备注字段 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 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 会要求独占使用数据库。若要以独占方式打开数据库,可在 OPEN DATABASE 中包含 EXCLUSIVE。
如果在创建新表时没有打开数据库,且包含了 NAME、CHECK、DEFAULT、FOREIGN KEY、PRIMARY KEY 或 REFERENCES 子句,则将产生错误。
请注意 CREATE TABLE 语法用逗号隔开各个 CREATE TABLE 选项。同样,NULL、NOT NULL、CHECK、DEFAULT、PRIMARY KEY 和 UNIQUE 子句必须放在包含列定义的圆括号之内。
自己再看看