ALTER TABLE-SQL 命 令

ALTER TABLE-SQL 命 令 - 图1以编程方式修改表的结构

语 法

ALTER TABLE TableName1

A D D | ALTER [COLUMN] FieldName1

FieldType [( nField W idth [, nPrecision ])] [NULL | NOT NULL]

[CHECK lExpression1 [ERROR cMessageText1 ]] [DEFAULT eExpression1 ]

[PRIMARY KEY | UNIQUE]

[REFERENCES TableName2 [TAG TagName1 ]] [NOCPTRANS]

– 或 者 –

ALTER TABLE TableName1

ALTER [COLUMN] FieldName2

[NULL | NOT NULL]

[SET DEFAULT eExpression2 ]

[SET CHECK lExpression2 [ERROR cMessageText2 ]] [DROP DEFAULT]

[DROP CHECK]

– 或 者 –

ALTER TABLE TableName1

[DROP [COLUMN] FieldName3 ]

[SET CHECK lExpression3 [ERROR cMessageText3 ]] [DROP CHECK]

[ADD PRIMARY KEY eExpression3 T A G TagName2 [FOR

lExpression4 ]]

[DROP PRIMARY K EY]

[ADD UNIQUE eExpression4 [TAG TagName3 [FOR lExpression5 ]]] [DROP UNIQUE TAG TagName4 ]

[ADD FOREIGN KEY [ eExpression5 ] TAG TagName4 [FOR

lExpression6 ]

REFERENCES TableName2 [TAG TagName5 ]] [DROP FOREIGN KEY TAG TagName6 [SAVE]]

[RENAME COLUMN FieldName4 TO FieldName5 ]

[NOVALIDATE]

参 数 描 述

TableName1

ALTER TABLE-SQL 命 令 - 图2指 定 要 修 改 其 结 构 的 表 名

ADD [COLUMN] FieldName1

ALTER TABLE-SQL 命 令 - 图3ALTER TABLE-SQL 命 令 - 图4ALTER TABLE-SQL 命 令 - 图5ALTER TABLE-SQL 命 令 - 图6指 定 要 添 加 的 字 段 名 一 个 表 最 多 可 含 255 个 字 段 如 果 一 或 多 个 字 段 允 许空 值 则 最 多 可 含 254 个 字 段

ALTER [COLUMN] FieldName1

ALTER TABLE-SQL 命 令 - 图7ALTER TABLE-SQL 命 令 - 图8指 定 要 修 改 的 字 段 名 字 段 已 存 在 ALTER TABLE-SQL 命 令 - 图9

FieldType [( nField W idth [, nPrecision ])]

ALTER TABLE-SQL 命 令 - 图10ALTER TABLE-SQL 命 令 - 图11ALTER TABLE-SQL 命 令 - 图12指 定 新 字 段 或 待 修 改 字 段 的 字 段 类 型 字 段 宽 度 和 字 段 精 度 小 数 点 后 的 位数 ALTER TABLE-SQL 命 令 - 图13

ALTER TABLE-SQL 命 令 - 图14参 数 FieldType 是 表 示 字 段 数 据 类 型 的 单 个 字 符 有 些 字 段 类 型 还 需 要 参 数

ALTER TABLE-SQL 命 令 - 图15ALTER TABLE-SQL 命 令 - 图16nFiledWidthnPrecision 或 者 两 者 皆 要

ALTER TABLE-SQL 命 令 - 图17下 表 列 出 了 参 数 FiledType 的 值 及 其 对 应 参 数 nFiledWidthnPression 的 取舍 情 况

ALTER TABLE-SQL 命 令 - 图18ALTER TABLE-SQL 命 令 - 图19字 段 类 型 字 段 宽 度 精 度 说 明

C

n

– 宽 度 为 n 的 字 符 字 段

D

– 日 期

T

– 日 期 时 间

N

n

d

宽 度 为

n

F

n

d

后 保 留

宽 度 为

d

n

后 保 留

d

I

B

– –

– d

整 型

双 精 度 型

Y

– –

货 币 型

L

– –

逻 辑 型

M

– –

备 注 型

G

– –

通 用 型

P

– –

图 片 型

ALTER TABLE-SQL 命 令 - 图20ALTER TABLE-SQL 命 令 - 图21ALTER TABLE-SQL 命 令 - 图22ALTER TABLE-SQL 命 令 - 图23ALTER TABLE-SQL 命 令 - 图24ALTER TABLE-SQL 命 令 - 图25ALTER TABLE-SQL 命 令 - 图26ALTER TABLE-SQL 命 令 - 图27对于 D T I Y L M G 和 P 型数据 省略参数 nFieldWidthnPrecision 如果

ALTER TABLE-SQL 命 令 - 图28ALTER TABLE-SQL 命 令 - 图29ALTER TABLE-SQL 命 令 - 图30对 N F 或 B 型数据没有给出参数 nPrecision 的值 其默认值为 0

NULL | NOT NULL

ALTER TABLE-SQL 命 令 - 图31ALTER TABLE-SQL 命 令 - 图32ALTER TABLE-SQL 命 令 - 图33ALTER TABLE-SQL 命 令 - 图34ALTER TABLE-SQL 命 令 - 图35ALTER TABLE-SQL 命 令 - 图36允 许 或 不 允 许 字 段 为 null 值 如 果 一 个 或 更 多 的 字 段 可 以 包 含 .null.值那 么 表 拥 有 的 最 多 的 字 段 数 将 减 少 一 个 从 255 降 到 254

ALTER TABLE-SQL 命 令 - 图37ALTER TABLE-SQL 命 令 - 图38如果省略 NULL 和 NOT NULL 当前的 SET NULL 设置将决定字段是否允许为 null

ALTER TABLE-SQL 命 令 - 图39ALTER TABLE-SQL 命 令 - 图40ALTER TABLE-SQL 命 令 - 图41并且如果命令中带有 PRIMARY KEY 或 UNIQUE 子句 当前的 SET NULL 设置不起作用 字段默认为非 null

CHECK lExpression1

ALTER TABLE-SQL 命 令 - 图42ALTER TABLE-SQL 命 令 - 图43ALTER TABLE-SQL 命 令 - 图44ALTER TABLE-SQL 命 令 - 图45ALTER TABLE-SQL 命 令 - 图46ALTER TABLE-SQL 命 令 - 图47ALTER TABLE-SQL 命 令 - 图48ALTER TABLE-SQL 命 令 - 图49指 定 字 段 的 有 效 性 规 则 lExpression1 为 逻 辑 表 达 式 值 可 以 是 用 户 定 义 的函 数 或 内 部 存 储 过 程 注 意 每 添 加 一 个 空 记 录 时 都 将 进 行 有 效 性 检 查如 果 有 效 性 规 则 不 允 许 添 加 的 记 录 中 有 空 字 段 值 V isual FoxPro 将 产 生 错 误信 息

ERROR cMessageText1

ALTER TABLE-SQL 命 令 - 图50ALTER TABLE-SQL 命 令 - 图51ALTER TABLE-SQL 命 令 - 图52指 定 字 段 有 效 性 检 查 出 现 错 误 时 显 示 的 错 误 信 息 只 有 在 浏 览 或 编 辑 窗 口 中修 改 数 据 时 此 信 息 才 可 能 显 示

DEFAULT eExpression1

ALTER TABLE-SQL 命 令 - 图53ALTER TABLE-SQL 命 令 - 图54指 定 字 段 默 认 值 eExpression1 的 数 据 类 型 必 须 与 字 段 的 数 据 类 型 相 同

PRIMARY KEY

ALTER TABLE-SQL 命 令 - 图55ALTER TABLE-SQL 命 令 - 图56创 建 主 索 引 标 识 索 引 标 识 与 字 段 同 名

UNIQUE

ALTER TABLE-SQL 命 令 - 图57创 建 与 字 段 同 名 的 候 选 索 引 标 识

ALTER TABLE-SQL 命 令 - 图58ALTER TABLE-SQL 命 令 - 图59ALTER TABLE-SQL 命 令 - 图60ALTER TABLE-SQL 命 令 - 图61ALTER TABLE-SQL 命 令 - 图62有关候选索引标识的更多信息 请参阅 Microsoft Visual FoxPro 6.0 中文版程序员指南 ALTER TABLE-SQL 命 令 - 图63 第 七章 表的操作

ALTER TABLE-SQL 命 令 - 图64ALTER TABLE-SQL 命 令 - 图65注 意 候 选 索 引 由 UNIQUE 选 项 创 建 具 有 在 ALTER TABLE 或 CREATE

ALTER TABLE-SQL 命 令 - 图66ALTER TABLE-SQL 命 令 - 图67ALTER TABLE-SQL 命 令 - 图68ALTER TABLE-SQL 命 令 - 图69ALTER TABLE-SQL 命 令 - 图70TABLE 中 的 ANSI 兼 容 性 与 带 UNIQUE 选 项 的 INDEX 命 令 创 建 的索 引 不 同 用 带 UNIQUE 选 项 的 INDEX 命 令 创 建 的 索 引 允 许 有 重 复 索 引关 键 字 而 候 选 索 引 不 允 许 有 重 复 索 引 关 键 字

ALTER TABLE-SQL 命 令 - 图71ALTER TABLE-SQL 命 令 - 图72在主索引或候选索引字段中 不允许有 null 值和重复记录

ALTER TABLE-SQL 命 令 - 图73ALTER TABLE-SQL 命 令 - 图74ALTER TABLE-SQL 命 令 - 图75ALTER TABLE-SQL 命 令 - 图76ALTER TABLE-SQL 命 令 - 图77ALTER TABLE-SQL 命 令 - 图78如果用 ADD COLUMN 子句创建一个新字段 若给允许 null 值的字段创建主索引或候选索引 Microsoft Visual FoxPro 不会产生错误 但 是 如果您试图往用作主索引或候选索引的字段中输入 null 值或重复值 Visual FoxPro 将产生错误信息

ALTER TABLE-SQL 命 令 - 图79ALTER TABLE-SQL 命 令 - 图80ALTER TABLE-SQL 命 令 - 图81ALTER TABLE-SQL 命 令 - 图82ALTER TABLE-SQL 命 令 - 图83如果修改已有的字段和由字段组成的主索引表达式或候选表达式时 将检查字段是否为 null 值或重复记录 如果为 null 值或重复记录 Visual FoxPro 将产生错误 并 且 不对表进行修改

REFERENCES TableName2 T A G TagName1

ALTER TABLE-SQL 命 令 - 图84ALTER TABLE-SQL 命 令 - 图85ALTER TABLE-SQL 命 令 - 图86ALTER TABLE-SQL 命 令 - 图87指 定 与 之 建 立 永 久 关 系 的 父 表 参 数 T A G TagName1 指 定 父 表 索 引 标 识 关系 建 立 在 此 父 表 索 引 标 识 基 础 上 索 引 标 识 最 长 为 10 个 字

NOCPTRANS

ALTER TABLE-SQL 命 令 - 图88ALTER TABLE-SQL 命 令 - 图89ALTER TABLE-SQL 命 令 - 图90ALTER TABLE-SQL 命 令 - 图91防 止 对 字 符 串 或 备 注 字 段 进 行 代 码 页 转 换 如 果 需 要 将 表 转 换 到 另 一 代 码页 那 么 指 定 了 NOCPTRANS 的 字 段 不 进 行 转 换 只 能 对 字 符 字 段 和 备 注字 段 指 定 NOCPTRANS

ALTER TABLE-SQL 命 令 - 图92下面的示例创建一个包含两个字符型字段和两个备注型字段 名称为 MYTABLE 的

ALTER TABLE-SQL 命 令 - 图93ALTER TABLE-SQL 命 令 - 图94ALTER TABLE-SQL 命 令 - 图95表 第 2 个字符型字段 char2 与第 2 个备注型字段 memo 2 包括了 NOCPTRANS 以避免翻译

CREATE TABLE mytable (char1 C(10), char2 C(10) NOCPTRANS,;

memo1 M, memo2 M NOCPTRANS)

ALTER [COLUMN] FieldName2

ALTER TABLE-SQL 命 令 - 图96ALTER TABLE-SQL 命 令 - 图97ALTER TABLE-SQL 命 令 - 图98ALTER TABLE-SQL 命 令 - 图99ALTER TABLE-SQL 命 令 - 图100指 定 要 修 改 的 已 有 的 字 段 名 注 意 在 单 独 的 ALTER TABLE 命 令 中 更 改 字 段一 个 以 上 的 属 性 时 需 要 多 个 A L T E R C O L U M N 子 句 请 参 阅 ALTER TABLE 示 例 了 解 A L T E R C O L U M N 子 句 是 如 何 构 造 的

SET DEFAULT eExpression2

ALTER TABLE-SQL 命 令 - 图101ALTER TABLE-SQL 命 令 - 图102指 定 已 有 字 段 的 新 默 认 值 eExpression2 的 数 据 类 型 必 须 与 字 段 数 据 类 型 相同

SET CHECK lExpression2

ALTER TABLE-SQL 命 令 - 图103ALTER TABLE-SQL 命 令 - 图104ALTER TABLE-SQL 命 令 - 图105为 已 有 字 段 指 定 新 的 有 效 性 规 则 lExpression2 值 必 须 为 逻 辑 表 达 式 也 可以 为 用 户 自 定 义 函 数 或 已 有 的 过 程

ERROR cMessageText2

ALTER TABLE-SQL 命 令 - 图106ALTER TABLE-SQL 命 令 - 图107ALTER TABLE-SQL 命 令 - 图108ALTER TABLE-SQL 命 令 - 图109ALTER TABLE-SQL 命 令 - 图110ALTER TABLE-SQL 命 令 - 图111ALTER TABLE-SQL 命 令 - 图112指 定 有 效 性 检 查 出 现 错 误 时 显 示 的 错 误 信 息 只 有 在 浏 览 窗 口 或 编辑 窗 口 改 变 数 据 时 才 可 能 显 示 此 信 息

DROP DEFAULT

ALTER TABLE-SQL 命 令 - 图113删 除 已 有 字 段 的 默 认 值

DROP CHECK

ALTER TABLE-SQL 命 令 - 图114删 除 已 有 字 段 的 有 效 性 规 则

DROP [COLUMN] FieldName3

ALTER TABLE-SQL 命 令 - 图115ALTER TABLE-SQL 命 令 - 图116从表中删除一个字段 删除一个字段的同时也删除了字段的默认值和字段有效性规则

ALTER TABLE-SQL 命 令 - 图117ALTER TABLE-SQL 命 令 - 图118ALTER TABLE-SQL 命 令 - 图119ALTER TABLE-SQL 命 令 - 图120ALTER TABLE-SQL 命 令 - 图121ALTER TABLE-SQL 命 令 - 图122字段被删除后 索引关键字或引用此字段的触发器表达式将变为无效 在这种情况 下 删除字段并不产生错误 但是在运行时刻 无效的索引关键字或触发器表达式将导致错误

SET CHECK lExpression3

ALTER TABLE-SQL 命 令 - 图123ALTER TABLE-SQL 命 令 - 图124ALTER TABLE-SQL 命 令 - 图125指 定 表 的 有 效 性 规 则 lExpression3 必 须 是 逻 辑 表 达 式 也 可 以 是 用 户 自 定义 函 数 或 已 有 的 过 程

ERROR cMessageText3

ALTER TABLE-SQL 命 令 - 图126ALTER TABLE-SQL 命 令 - 图127ALTER TABLE-SQL 命 令 - 图128指 定 表 的 有 效 性 检 查 出 现 错 误 时 显 示 的 错 误 信 息 只 有 在 浏 览 窗 口 或 编 辑 窗口 中 改 变 数 据 值 时 才 可 能 显 示 此 信 息

DROP CHECK

ALTER TABLE-SQL 命 令 - 图129删 除 表 的 有 效 性 规 则

ALTER TABLE-SQL 命 令 - 图130ALTER TABLE-SQL 命 令 - 图131ALTER TABLE-SQL 命 令 - 图132ALTER TABLE-SQL 命 令 - 图133ALTER TABLE-SQL 命 令 - 图134ALTER TABLE-SQL 命 令 - 图135ADD PRIMARY KEY eExpression3 T A G TagName2 [FOR lExpression4 ] 往表中添加主索引 eExpression 指定主索引关键字表达式 TagName2 指定主索引标识名 索引标识名最长为 10 个字符 如果省略 TAG TagName2eExpression3 是一个字段 主关键索引标识与指定的 eExpression3 同名

ALTER TABLE-SQL 命 令 - 图136ALTER TABLE-SQL 命 令 - 图137ALTER TABLE-SQL 命 令 - 图138ALTER TABLE-SQL 命 令 - 图139ALTER TABLE-SQL 命 令 - 图140包含 FOR lExpression4 子句 可以指定只有满足筛选表达式 lExpression4 的记录才可以显示和访问 主索引关键字是在所有文件中只为符合这个筛选表达式的记录创建的 注意 应该避免使用 FOR 子句创建一个主索引 主索引关键字的唯一性只限制

ALTER TABLE-SQL 命 令 - 图141ALTER TABLE-SQL 命 令 - 图142ALTER TABLE-SQL 命 令 - 图143满足筛选表达式 lExpression4 的记录 相反 应该使用带 FOR 子句的 INDEX 命令创建一个筛选索引

ALTER TABLE-SQL 命 令 - 图144如果 lExpression4 是一个可优化的表达式 则 Rushmore 技术优化这个 ALTER

ALTER TABLE-SQL 命 令 - 图145ALTER TABLE-SQL 命 令 - 图146ALTER TABLE-SQL 命 令 - 图147TABLE ... FOR lExpression4 命令 为了得到最好的性能 可在 FOR 子句中使用一个可优化的表达式

ALTER TABLE-SQL 命 令 - 图148ALTER TABLE-SQL 命 令 - 图149ALTER TABLE-SQL 命 令 - 图150ALTER TABLE-SQL 命 令 - 图151ALTER TABLE-SQL 命 令 - 图152ALTER TABLE-SQL 命 令 - 图153详细内容 请参阅 Microsoft Visual FoxPro 6.0 中文版程序员指南 第 十五章 优化应用程序

DROP PRIMARY KEY

ALTER TABLE-SQL 命 令 - 图154ALTER TABLE-SQL 命 令 - 图155ALTER TABLE-SQL 命 令 - 图156ALTER TABLE-SQL 命 令 - 图157删 除 主 索 引 及 其 标 识 因 为 表 只 能 有 一 个 主 关 键 字 所 以 不 必 指 定 关 键 字 的名 称 删 除 主 索 引 也 将 删 除 所 有 基 于 此 关 键 字 的 永 久 关 系

ADD UNIQUE eExpression4 [TAG TagName3 [FOR lExpression5 ]]

ALTER TABLE-SQL 命 令 - 图158ALTER TABLE-SQL 命 令 - 图159ALTER TABLE-SQL 命 令 - 图160ALTER TABLE-SQL 命 令 - 图161ALTER TABLE-SQL 命 令 - 图162ALTER TABLE-SQL 命 令 - 图163往表中添加候选索引 eExpression4 指定候选索引关键字表达式 TagName3 指定候选索引标识名 候选标识名最长可为 10 个字符 如果省略参数 TAG TagName3 并且eExpression4 为单个字段 候选索引标识与 eExpression4 中的指定的字段同名

ALTER TABLE-SQL 命 令 - 图164ALTER TABLE-SQL 命 令 - 图165ALTER TABLE-SQL 命 令 - 图166包含 FOR lExpression 5 子句 可以指定只有满足筛选表达式 lExpression 5 的记录才可以显示和访问 候选索引关键字是在所有文件中只为符合这个筛选表达式的记录创建的

ALTER TABLE-SQL 命 令 - 图167如果 lExpression 5 是一个可优化的表达式 则 Rushmore 技术优化这个 ALTER

ALTER TABLE-SQL 命 令 - 图168ALTER TABLE-SQL 命 令 - 图169ALTER TABLE-SQL 命 令 - 图170TABLE ... FOR lExpression 5 命令 为了得到最好的性能 可在 FOR 子句中使用一个可优化的表达式

ALTER TABLE-SQL 命 令 - 图171ALTER TABLE-SQL 命 令 - 图172ALTER TABLE-SQL 命 令 - 图173ALTER TABLE-SQL 命 令 - 图174详细内容 请参阅 Microsoft Visual FoxPro 6.0 中文版程序员指南 第 十五章 优化应

ALTER TABLE-SQL 命 令 - 图175ALTER TABLE-SQL 命 令 - 图176用程序

DROP UNIQUE TAG TagName4

ALTER TABLE-SQL 命 令 - 图177ALTER TABLE-SQL 命 令 - 图178ALTER TABLE-SQL 命 令 - 图179删 除 候 选 索 引 及 其 标 识 因 为 表 可 能 有 多 个 候 选 关 键 字 所 以 必 须 指 定 候 选索 引 标 识 名

ALTER TABLE-SQL 命 令 - 图180ALTER TABLE-SQL 命 令 - 图181ALTER TABLE-SQL 命 令 - 图182ALTER TABLE-SQL 命 令 - 图183ALTER TABLE-SQL 命 令 - 图184ALTER TABLE-SQL 命 令 - 图185ADD FOREIGN KEY [ eExpression5 ] TAG TagName4 [FOR lExpression6 ] 往表中添加外部关键字 非主关键字 索 引 eExpression5 指定外部索引关键字表达式 TagName4 指定外部索引标识名 索引标识名最长为 10 个字符

ALTER TABLE-SQL 命 令 - 图186包含 FOR lExpression 6 子句 可以指定只有满足筛选表达式 lExpression 6 的记录

ALTER TABLE-SQL 命 令 - 图187ALTER TABLE-SQL 命 令 - 图188才可以显示和访问 外部索引关键字是在所有文件中只为符合这个筛选表达式的记录创建的

ALTER TABLE-SQL 命 令 - 图189ALTER TABLE-SQL 命 令 - 图190ALTER TABLE-SQL 命 令 - 图191ALTER TABLE-SQL 命 令 - 图192如果 lExpression 6 是一个可优化的表达式 则 Rushmore 技 术 优 化 这 个 ALTER TABLE ... FOR lExpression 6 命令 为了得到最好的性能 可在 FOR 子句中使用一个可优化的表达式

ALTER TABLE-SQL 命 令 - 图193ALTER TABLE-SQL 命 令 - 图194ALTER TABLE-SQL 命 令 - 图195ALTER TABLE-SQL 命 令 - 图196ALTER TABLE-SQL 命 令 - 图197ALTER TABLE-SQL 命 令 - 图198详细内容 请参阅 Microsoft Visual FoxPro 6.0 中文版程序员指南 第 十五章 优化应用程序

REFERENCES TableName2 [TAG TagName5 ]

ALTER TABLE-SQL 命 令 - 图199ALTER TABLE-SQL 命 令 - 图200ALTER TABLE-SQL 命 令 - 图201ALTER TABLE-SQL 命 令 - 图202ALTER TABLE-SQL 命 令 - 图203ALTER TABLE-SQL 命 令 - 图204指 定 在 其 上 创 建 了 永 久 关 系 的 父 表 使 用 T A G TagName5 指 定 一 个 已 有 的 索引 标 识 基 于 此 索 引 标 识 建 立 表 与 父 表 的 一 个 关 系 索 引 标 识 名 最 长 可 以 为10 个 字 符 如 果 省 略 参 数 T A G TagName5 则 使 用 父 表 的 主 索 引 标 识 建 立 关系

DROP FOREIGN KEY TAG TagName6 [SAVE]

ALTER TABLE-SQL 命 令 - 图205ALTER TABLE-SQL 命 令 - 图206ALTER TABLE-SQL 命 令 - 图207ALTER TABLE-SQL 命 令 - 图208ALTER TABLE-SQL 命 令 - 图209删 除 索 引 标 识 为 TagName6 的 外 部 关 键 字 如 果 省 略 SAVE 参 数 将 从 结 构索 引 中 删 除 索 引 标 识 如 果 加 入 SAVE 参 数 则 不 从 结 构 索 引 中 删 除 索 引 标识

R E N A M E C O L U M N FieldName4 TO FieldName5

ALTER TABLE-SQL 命 令 - 图210ALTER TABLE-SQL 命 令 - 图211允 许 改 变 表 中 字 段 的 字 段 名 FieldName4 指 定 待 更 改 的 字 段 名 FieldName5

ALTER TABLE-SQL 命 令 - 图212指 定 新 的 字 段 名

ALTER TABLE-SQL 命 令 - 图213ALTER TABLE-SQL 命 令 - 图214ALTER TABLE-SQL 命 令 - 图215ALTER TABLE-SQL 命 令 - 图216ALTER TABLE-SQL 命 令 - 图217警 告 改 变 表 的 字 段 名 时 一 定 要 小 心 索 引 表 达 式 字 段 和 表 的 有 效 性 规 则命 令 函 数 等 等 可 能 仍 会 引 用 原 始 字 段 名

NOVALIDATE

ALTER TABLE-SQL 命 令 - 图218ALTER TABLE-SQL 命 令 - 图219ALTER TABLE-SQL 命 令 - 图220ALTER TABLE-SQL 命 令 - 图221ALTER TABLE-SQL 命 令 - 图222选 用 这 一 选 项 后 V isual FoxPro 修 改 表 的 结 构 不 受 表 中 数 据 完 整 性 的 约 束默 认 时 V isual FoxPro 改 变 表 结 构 将 受 到 表 中 数 据 的 完 整 性 约 束 使 用NOVALIDATE 参 数 将 使 默 认 情 况 无 效

说 明

ALTER TABLE-SQL 命 令 - 图223ALTER TABLE-SQL 命 令 - 图224ALTER TABLE-SQL 命 令 - 图225ALTER TABLE-SQL 命 令 - 图226ALTER TABLE 命令可以用于修改还没有添加到数据库中的表的结构 然而在修改自由表时 如果加入 DEFAULT FOREIGN KEY PRIMARY REFERENCES 或 SET 子

ALTER TABLE-SQL 命 令 - 图227ALTER TABLE-SQL 命 令 - 图228句 Visual FoxPro 将出现错误

ALTER TABLE-SQL 命 令 - 图229ALTER TABLE-SQL 命 令 - 图230ALTER TABLE-SQL 命 令 - 图231ALTER TABLE 命令可以通过建立新表头和往表头中添加记录来重建表 例如 改变字段类型或字段宽度

ALTER TABLE-SQL 命 令 - 图232ALTER TABLE-SQL 命 令 - 图233ALTER TABLE-SQL 命 令 - 图234ALTER TABLE-SQL 命 令 - 图235表经过重建后 将对所有改变了类型或宽度的字段执行字段有效性规则 如果修改了表中所有字段的类型或宽度 将执行表的有效性规则

ALTER TABLE-SQL 命 令 - 图236ALTER TABLE-SQL 命 令 - 图237ALTER TABLE-SQL 命 令 - 图238ALTER TABLE-SQL 命 令 - 图239ALTER TABLE-SQL 命 令 - 图240ALTER TABLE-SQL 命 令 - 图241ALTER TABLE-SQL 命 令 - 图242如果对已含有记录的表修改其字段有效规则或表有效性规则 Visual FoxPro 将检查新的字段或表有效性规则是否与存在数据相符合 并在发现有不符之处时发出警告 如果要修改的表在数据库中 ALTER TABLE-SQL 命令需要独占使用数据库 若要独占打开数据库 可使用包含 EXCLUSIVE 子句的 OPEN DATABASE 命令

示 例

ALTER TABLE-SQL 命 令 - 图243ALTER TABLE-SQL 命 令 - 图244ALTER TABLE-SQL 命 令 - 图245示例 1 往表 customer 中添加字段 fax 并且允许字段有 null 值示例 2 使 cust_id 字段为 customer 表的主关键字

ALTER TABLE-SQL 命 令 - 图246ALTER TABLE-SQL 命 令 - 图247ALTER TABLE-SQL 命 令 - 图248ALTER TABLE-SQL 命 令 - 图249示例 3 给 orders 表中的 quantity 字段添加有效性规则 使字段 quantity 的值非负示例 4 基于表 customer 的关键字 cust_id 和表 orders 中的候选关键字 cust_id 建立customer 和 orders 间的一对多永久关系

ALTER TABLE-SQL 命 令 - 图250示例 5 删除表 orders 的 quantity 字段的有效性规则

ALTER TABLE-SQL 命 令 - 图251ALTER TABLE-SQL 命 令 - 图252示例 6 删除表 customer 和表 orders 间的永久关系 但保持 orders 表中的 cust_id 索引标识

ALTER TABLE-SQL 命 令 - 图253ALTER TABLE-SQL 命 令 - 图254ALTER TABLE-SQL 命 令 - 图255ALTER TABLE-SQL 命 令 - 图256ALTER TABLE-SQL 命 令 - 图257ALTER TABLE-SQL 命 令 - 图258ALTER TABLE-SQL 命 令 - 图259ALTER TABLE-SQL 命 令 - 图260示例 7 添加名为 fax2 的字段到 customer 中以防止字段包含 null 值 将显示表的新结 构 两个 ALTER COLUMN 子句用于允许字段有 null 值 并且将字段的默认值设置为null 值 注意在单独的 ALTER TABLE 命令中更改字段一个以上的属性时 需要多个ALTER COLUMN 子句 新字段将被从表中删除 表恢复到原来的状态

  • 示例 1

SET PATH TO (HOME(2) + 'Data\') && 为表设置路径

ALTER TABLE customer ADD COLUMN fax c(20) NULL

  • 示例 2

ALTER TABLE customer ADD PRIMARY KEY cust_id TAG cust_id

ALTER TABLE customer ALTER COLUMN cust_id c(5) PRIMARY KEY

  • 示例 3

ALTER TABLE orders;

ALTER COLUMN quantity SET CHECK quantity >= 0; ERROR "Quantities must be non-negative"

  • 示例 4

ALTER TABLE orders;

ADD FOREIGN KEY cust_id TAG cust_id REFERENCES customer

  • 示例 5

ALTER TABLE orders ALTER COLUMN quantity DROP CHECK

  • 示例 6

ALTER TABLE orders DROP FOREIGN KEY TAG cust_id SAVE

  • 示例 7 CLEAR

ALTER TABLE customer ADD COLUMN fax2 c(20) NOT NULL DISPLAY STRUCTURE

ALTER TABLE customer;

ALTER COLUMN fax2 NULL;

ALTER COLUMN fax2 SET DEFAULT .NULL.

ALTER TABLE customer DROP COLUMN fax2

请 参 阅

CREATE TABLE-SQL , INDEX , MODIFY STRUCTURE , OPEN DATABASE