ALTER TABLE - SQL 命令

以编程方式修改表的结构。

语法

  
ALTER TABLE TableName1  
   ADD | ALTER [COLUMN] FieldName1  
      FieldType [(nFieldWidth [, nPrecision])]  
      [NULL | NOT NULL]  
      [CHECK lExpression1 [ERROR cMessageText1]]  
      [DEFAULT eExpression1]  
      [PRIMARY KEY | UNIQUE]  
      [REFERENCES TableName2 [TAG TagName1]]  
      [NOCPTRANS]  
 - Or -  
ALTER TABLE TableName1  
   ALTER [COLUMN] FieldName2  
      [NULL | NOT NULL]  
      [SET DEFAULT eExpression2]  
      [SET CHECK lExpression2 [ERROR cMessageText2]]  
      [DROP DEFAULT]  
      [DROP CHECK]  
 - Or -  
ALTER TABLE TableName1  
   [DROP [COLUMN] FieldName3]  
   [SET CHECK lExpression3 [ERROR cMessageText3]]  
   [DROP CHECK]  
   [ADD PRIMARY KEY eExpression3 TAG TagName2]  
   [DROP PRIMARY KEY]  
   [ADD UNIQUE eExpression4 [TAG TagName3]]  
   [DROP UNIQUE TAG TagName4]  
   [ADD FOREIGN KEY [eExpression5] TAG TagName4  
      REFERENCES TableName2 [TAG TagName5]]  
   [DROP FOREIGN KEY TAG TagName6 [SAVE]]  
   [RENAME COLUMN FieldName4 TO FieldName5]  
   [NOVALIDATE]  

参数

TableName1
指定已修改其结构的表的名称。

ADD [COLUMN] FieldName1
指定要添加的字段的名称。

ALTER [COLUMN] FieldName1
指定要修改的现有字段的名称。

FieldType [ ( nFieldWidth [, nPrecision]])
指定新字段或已修改字段的字段类型、字段宽度和字段精度 () 的小数位数。

FieldType 是一个字母,指示字段的 数据类型。 某些字段数据类型要求指定 nFieldWidthnPrecision 或两者。

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

NULL | NOT NULL
允许或阻止字段中的 null 值。

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

CHECK lExpression1
指定字段的验证规则。 lExpression1 的计算结果必须为逻辑表达式,可以是用户定义的函数或存储过程。 每当追加空白记录时,将检查验证规则。 如果验证规则不允许在追加的记录中使用空白字段值,则会生成错误。

错误 cMessageText1
指定在字段验证规则生成错误时显示的错误消息。

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

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

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

注意

候选索引 (包括 UNIQUE 选项来创建,该选项用于在 ALTER TABLE 或 CREATE TABLE 中实现 ANSI 兼容性,) 不同于使用 INDEX 命令中的 UNIQUE 选项创建的索引。 在 INDEX 命令中使用 UNIQUE 创建的索引允许重复索引键;候选索引不允许重复索引键。

在用于主索引或候选索引的字段中,不允许使用 Null 值和重复记录。

如果使用 ADD COLUMN 创建新字段,则为支持 null 值的字段创建主索引或候选索引时,Visual FoxPro 不会生成错误。 但是,如果尝试在用于主索引或候选索引的字段中输入 null 值或重复值,Visual FoxPro 将生成错误。

如果要修改现有字段,并且主索引表达式或候选索引表达式由表中的字段组成,则 Visual FoxPro 会检查这些字段,以查看它们是否包含 null 值或重复记录。 如果存在,Visual FoxPro 将生成错误,并且不会更改表。

REFERENCES TableName2 TAG TagName1
指定建立持久关系的父表。 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)  

ALTER [COLUMN] FieldName2
指定要修改的现有字段的名称。

SET DEFAULT eExpression2
为现有字段指定新的默认值。 eExpression2 的数据类型必须与字段的数据类型相同。

SET CHECK lExpression2
为现有字段指定新的验证规则。 lExpression2 的计算结果必须为逻辑表达式,可以是用户定义的函数或存储过程。

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

DROP DEFAULT
删除现有字段的默认值。

DROP CHECK
删除现有字段的验证规则。

DROP [COLUMN] FieldName3
指定要从表中删除的字段。 从表中删除字段也会删除字段的默认值设置和字段验证规则。

如果索引键或触发器表达式引用字段,则在删除字段时,表达式将变为无效。 在这种情况下,删除字段时不会生成错误,但无效的索引键或触发器表达式将在运行时生成错误。

SET CHECK lExpression3
指定表验证规则。 lExpression3 的计算结果必须为逻辑表达式,可以是用户定义的函数或存储过程。

错误 cMessageText3
指定表验证规则生成错误时显示的错误消息。 仅当数据在“浏览”或“编辑”窗口中更改时,才会显示该消息。

DROP CHECK
删除表的验证规则。

ADD PRIMARY KEY eExpression3TAG TagName2
向表添加主索引。 eExpression3 指定主索引键表达式, TagName2 指定主索引标记的名称。 索引标记名称最多可以包含 10 个字符。 如果省略 TAG TagName2eExpression3 是单个字段,则主索引标记与 eExpression3 中指定的字段同名。

DROP PRIMARY KEY
删除主索引及其索引标记。 由于一个表只能有一个主键,因此无需指定主键的名称。 删除主索引还会删除基于主键的任何持久关系。

ADD UNIQUE eExpression4[TAG TagName3]
向表添加候选索引。 eExpression4 指定候选索引键表达式, TagName3 指定候选索引标记的名称。 索引标记名称最多可以包含 10 个字符。 如果省略 TAG TagName3 并且 eExpression4 是单个字段,则候选索引标记与 eExpression4 中指定的字段同名。

DROP UNIQUE TAG TagName4
删除候选索引及其索引标记。 由于表可以有多个候选键,因此必须指定候选索引标记的名称。

ADD FOREIGN KEY [ eExpression5]TAG TagName4
将外部 (非主) 索引添加到表中。 eExpression5 指定外索引键表达式, TagName4 指定外部索引标记的名称。 索引标记名称最多可以包含 10 个字符。

REFERENCES TableName2[TAG TagName5]
指定建立持久关系的父表。 包括 TAG TagName5 ,以基于父表的现有索引标记建立关系。 索引标记名称最多可以包含 10 个字符。 如果省略 TAG TagName5,将使用父表的主索引标记建立关系。

DROP FOREIGN KEY TAG TagName6[SAVE]
删除索引标记为 TagName6 的外键。 如果省略 SAVE,则会从结构索引中删除索引标记。 包括 SAVE 可防止从结构索引中删除索引标记。

将 COLUMN FieldName4重命名为 FieldName5
允许您更改表中字段的名称。 FieldName4 指定重命名的字段的名称。 FieldName5 指定字段的新名称。

注意

重命名表字段时请小心,因为索引表达式、字段和表验证规则、命令和函数可能会引用原始字段名称。

NOVALIDATE
指定 Visual FoxPro 允许对表的结构进行更改;这些更改可能会违反表中数据的完整性。 默认情况下,Visual FoxPro 会阻止 ALTER TABLE 进行违反表中数据完整性的更改。 包括 NOVALIDATE 以替代此默认行为。

注解

ALTER TABLE 可用于修改尚未添加到数据库的表的结构。 但是,如果在修改可用表时包含 DEFAULT、FOREIGN KEY、PRIMARY KEY、REFERENCES 或 SET 子句,Visual FoxPro 将生成错误。

ALTER TABLE 可以通过创建新的表标题并将记录追加到表标题来重新生成表。 例如,更改字段的类型或宽度可能会导致重新生成表。

重新生成表后,将对其类型或宽度发生更改的任何字段执行字段验证规则。 如果更改表中任何字段的类型或宽度,将执行表规则。

如果修改包含记录的表的字段或表验证规则,Visual FoxPro 会针对现有数据测试新字段或表验证规则,并在字段或表验证规则或触发器冲突的第一次出现时发出警告。

如果修改的表位于数据库中,则 ALTER TABLE - SQL 要求以独占方式使用该数据库。 若要打开数据库以供独占使用,请在 OPEN DATABASE 中包含 EXCLUSIVE。

另请参阅

CREATE TABLE - SQL 命令
INDEX 命令