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 必须计算为逻辑表达式,并且可以是用户定义的函数或存储过程。 每当追加空白记录时,将检查验证规则。 如果验证规则不允许追加记录中的空白字段值,则会生成错误。

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

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

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

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

注释

候选索引(通过包括为 ALTER TABLE 或 CREATE TABLE 中的 ANSI 兼容性提供的 UNIQUE 选项创建的索引)不同于在 INDEX 命令中使用 UNIQUE 选项创建的索引。 在 INDEX 命令中使用 UNIQUE 创建的索引允许重复索引键;候选索引不允许重复索引键。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

DROP CHECK
删除表的验证规则。

ADD PRIMARY KEY eExpression3TAG TagName2
向表添加主索引。 eExpression3 指定主索引键表达式, TagName2 指定主索引标记的名称。 索引标记名称最多可以包含 10 个字符。 如果省略 TAG TagName2 并且 eExpression3 是单个字段,则主索引标记的名称与 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 命令