用指定字段或从一个数组创建一个。
CREATE TABLE | DBF TableName1 [NAME LongTableName] [FREE]
( 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
指定要创建的表的名称。TableName1 参数指定表名。TABLE 和 DBF 选项作用相同。
NAME LongTableName
指定表的长名。因为长表名存储在数据库中,只有在打开数据库时才能指定长表名。长名最多可包括 128 个字符,在数据库中可用来代替短名。
FREE
指定所创建的表不添加到数据库中。如果没有打开数据库则不需要 FREE。
FieldName1, FieldType, nFieldWidth, nPrecision
分别指定字段名、字段类型、字段宽度和字段精度(小数位数)。单个表中不能包含 255 个以上的字段。如果一个或一个以上字段允许允许 null 值, 限制减少为 254 个字段。
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 默认为零(没有小数位)。如果 B 类型没有包括 nPrecision 参数默认的小数位数是 SET DECIMALS 命令的设置。
NULL | NOT NULL
指定字段是否允许 null 值。NULL 允许 null 值, NOT NULL 不允许 null 值。如果一个或一个以上的字段允许 null 值, 表中允许的最大字段数从 255 减少为 254 个。
CHECK lExpression1
指定字段的有效性规则。lExpression1 可以是用户自定义函数。请注意,当追加空记录时,就要检查有效性规则。如果有效性规则不允许在追加记录中有空字段值,则产生错误。
ERROR cMessageText1
指定当字段规则产生错误时,Visual FoxPro 显示的错误信息。只有当数据在浏览窗口或编辑窗口中做了修改时,才显示信息。
AUTOINC [NEXTVALUE NextValue [STEP StepValue]]
启用字段的 autoincrementing。NextValue 指定开始值并且可以是一个范围从 2,147,483,647 到 -2,147,483,647 之间的正的或负的整数。默认值是 1。可以用表设计器中的字段标签中的 Next Value 微调设置 NextValue。
StepValue 为字段指定增量值并可以是一个正的, 非零的范围从 1 到 255 之间的整型值。默认值是 1。可以可以用表设计器中的字段标签中的 Step 微调设置 StepValue。
Autoincrementing 值不能为 NULL。
DEFAULT eExpression1
指定字段的默认值。eExpression1 的数据类型必须和字段的数据类型相同。
如果你用 AUTOINC 子句打开了一个字段的 autoincrementing 并指定了一个默认值, Visual FoxPro 保存默认值在表中但不使用它。如果你用 ALTER TABLE - SQL 命令来从字段移去 autoincrementing, Visual FoxPro 使用默认值。
primary key | UNIQUE
将此字段作为主索引。主索引标识名和字段名相同。 UNIQUE 为 FieldName1 指定的字段创建一个候选索引。主索引标识或候选索引标识与字段同名。关于主关键和候选索引的详细信息, 参见 设置主索引或候选索引。
COLLATE cCollateSequence
指定一个非默认设置 MACHINE 的比较序列。cCollateSequence 参数必须是一个合法的 Visual FoxPro 比较序列。关于设置比较序列的详细信息, 参见 优化国际化应用程序 和 set collate 命令。
REFERENCES TableName2 [ TAG TagName1 ]
指定建立永久关系的父表。父表不能是自由表。
TagName1 参数子句为 TableName2 中的父表指定一个索引标识名。最多可包含 10 个字符。如果省略 TAG 子句, 就用父表的主索引关键字建立关系。如果父表没有主索引,则 Visual FoxPro 产生错误。
NOCPTRANS
防止字符字段和备注字段转换到另一个代码页。如果要将表转换到其他代码页,则指定了 NOCPTRANS 的字段不转换。只能为字符字段和备注字段指定 NOCPTRANS。该选项创建显示在表设计器中的 Character (binary) 和 Memo (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 ]
创建侯选索引。eExpression3 指定表中的任一字段或字段组合。但是,如果已经用一个 PRIMARY KEY 选项创建了一个主索引,则不能包含指定为主索引的字段。
TAG TagName3 为要创建的候选索引标识指定了标识名。索引标识名最多可包含 10 个字符。
NODUP 创建一个候选外部索引。
REFERENCES TableName3 TAG TagName5
指定要建立永久关系的父表。
可包含 TAG TagName5,为父表建立一个基于索引标识的关系。索引标识名最多可包含 10 个字符。如果省略 TAG TagName5,则默认用父表的主索引关键字建立关系。
CHECK lExpression2
指定表的有效性规则。lExpression2 参数必须是一个逻辑表达式并可以是一个用户定义函数或储存过程。
ERROR cMessageText2
指定字段有效性检查出现错误时显示的错误信息。只有在“浏览”或“编辑”窗口中修改数据时,此信息才可能显示。
FROM ARRAY ArrayName
指定一个已存在数组的名称,其中包含有临时表的每个字段的名称、类型、精度和宽度。有关数组内容的正确格式,可以用 FROM ARRAY 子句代替分别指定字段。有关数组内容的正确格式,请参阅 AFIELDS() 函数。
StepValue 值大于零时 Autoincrementing 打开。
备注
新建的表在可用的最低工作区号 (未使用的) 打开并可以用它的别名访问。新建的表是以独占方式打开, 而不管当前的 SET EXCLUSIVE 命令设置。
如果一个数据库是打开的而且你没有包括 FREE 子句, 新建的表被添加到数据库中。不能创建一个与数据库中的表同名的新表。
如果表被转换到另一个代码页, 指定了 NOCPTRANS 的字段不会转换。
如果在你创建新表时没有打开数据库, 包括 NAME, CHECK, DEFAULT, foreign key, primary key, 或者 REFERENCES 子句会产生一个错误。
在 Visual FoxPro OLE DB Provider 中用 CREATE TABLE 创建的表被放在调用程序所在的默认文件夹, 除非你指定了另一个目录。
注意 CREATE TABLE 语法用逗号分隔特定的 CREATE TABLE 选项。你必须放置 NULL, NOT NULL, CHECK, DEFAULT, primary key 和 UNIQUE 子句在包含字段定义的圆括号中。
如果省略 NULL 和 NOT NULL, 当前的 SET NULL 设置决定字段是否允许 null 值。但是, 如果省略 NULL 和 NOT NULL 但包括了 primary key 或 UNIQUE 子句, Visual FoxPro 忽略当前的 SET NULL 设置, 并且字段的默认是 NOT NULL。
如果在 CHECK 中指定的有效性规则不允许在添加的记录中的空字段 Visual FoxPro 产生一个错误。
在使用主索引和候选索引的字段中不允许 null 值和重复记录。但是, 如果你创建一个支持 null 值的主索引或候选索引 Visual FoxPro 不产生错误。如果你试图输入一个 null 或重复值到使用主索引或候选索引的字段中时 Visual FoxPro 产生一个错误。
注意 带 UNIQUE 选项的 CREATE TABLE – SQL 或 ALTER TABLE – SQL 命令创建候选索引用 (提供它是为了和 ANSI 兼容), 与带 UNIQUE 选项的 INDEX 命令创建的索引是不同的。用带 UNIQUE 选项的 INDEX 命令创建的索引允许重复的索引关键字; 候选索引不允许重复的索引关键字。关于 INDEX 命令的 UNIQUE 选项的详细信息, 参见 index 命令。
对于 NextValue, 空值被认为是 0 并至使 incrementing 开始于 0 + StepValue。
StepValue 增量值总是正向增加。如果你想要使用一个负的自动增量序列, 应该开始于一个负的 NextValue 值且步长向 0 靠近 StepValue 增量值。例如, 如果 NextValue 等于 -2147483647, 第一步产生值 -2147483646。
CREATE TABLE 能够识别所有 AFIELDS() 函数中可用的字段并在 StepValue 值大于零时打开表中的 autoincrementing。
示例
下面示例创建一个名为 mydata1 的新的数据库并执行以下任务:
用 CREATE TABLE 来创建三个表: Salesman, Customer 和 Orders。
在第二个 CREATE TABLE 命令中, 用 foreign key 和 REFERENCES 子句在 Salesman 和 Order 表间创建一个固定的一对多关系。
在第三个 CREATE TABLE 命令中用 DEFAULT 子句创建默认值并为特定字段的数据输入用 CHECK 和 ERROR 子句建立商业规则。
用 MODIFY DATABASE 来显示三个表间的关系。
CLOSE DATABASES
CLEAR
CREATE DATABASE mydata1
* 用主键创建 Salesman 表。
CREATE TABLE Salesman ;
(SalesID c(6) primary key, ;
SaleName C(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
* 并创建一些商业规则如默认值和检查。
CREATE TABLE Orders ;
(OrderId i primary key, ;
CustId i REFERENCES customer TAG CustId, ;
OrderAmt y(4), ;
OrderQty i ;
DEFAULT 10 ;
CHECK (OrderQty > 9) ;
ERROR "订货数量至少为 10", ;
DiscPercent n(6,2) NULL ;
DEFAULT .NULL., ;
CHECK (OrderAmt > 0) ERROR "订货金额必须大于 > 0" )
* 显示新建的数据库, 表和关系。
MODIFY DATABASE
* 删除示例文件。
SET SAFETY OFF && 抑制验证信息。
CLOSE DATABASES && 在删除前关闭数据库。
DELETE DATABASE mydata1 DELETETABLES
下面示例用 NOCPTRANS 来防止转换到不同的代码页。示例创建一个名为 "mytable" 的包含两个字符字段和一个备注字段的表。第二个字符字段 "char2" 和第二个备注字段 "memo2" 包括了 NOCPTRANS 来防止转换。
CREATE TABLE mytable (char1 C(10), char2 C(10) NOCPTRANS,;
memo1 M, memo2 M NOCPTRANS)
温馨提示:内容为网友见解,仅供参考