使用ALTERTABLE语句来更改表中的列.doc_第1页
使用ALTERTABLE语句来更改表中的列.doc_第2页
使用ALTERTABLE语句来更改表中的列.doc_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

使用 ALTER TABLE 语句来更改表中的列创建数据库之前,需要考虑要存储在数据库中的数据的类型和组织。需要计划您的业务可能要使用哪种类型的数据以及如何使用这些数据。但是,情况会有所变化。尽管计划良好,但仍可能出现新需求,因此需要对数据库中的表作出更改。可以使用 ALTER TABLE 语句来改变表数据的行格式:删除列、更改列的类型和某些其他列属性。在执行包含重组建议的操作的 ALTER TABLE 语句之后访问表的限制良好地计划表改变的实施非常重要。运行包含重组建议的操作的 ALTER TABLE 语句时,可能必须要认识到的一点是:一旦执行了 ALTER TABLE 语句,表将处于重组暂挂状态。这意味着在执行重组之前,几乎所有操作都不能访问该表。请参阅 SQL Reference 中的 ALTER TABLE 语句,以获取 ALTER TABLE 操作的完整列表(一些操作也称为 REORG 建议的操作)。在包含 REORG 建议的操作的 ALTER TABLE 语句之后,只能对表执行下列语句: REORG TABLE DROP TABLE ALTER TABLE RENAME TABLE要在重组失败的情况下允许数据恢复,可以使用基于扫描的只读语句来读取表数据,即使用 TABLE SCAN 语句。另外,不允许基于索引的表访问。如果使用基于表扫描的访问而不使用基于索引的访问,则还可以从表中发出 SELECT 语句。下列 ALTER TABLE 语句需要验证行数据,并且不允许它后面跟着 REORG 建议的 ALTER。但是,可以执行其他大多数 ALTER TABLE 语句。不能使用的 ALTER TABLE 语句是需要扫描列数据以验证改变操作是否有效的那些语句。具体地说,这表示不能对表执行下列语句: ADD UNIQUE CONSTRAINT ADD CHECK CONSTRAINT ADD REFERENTIAL CONSTRAINT ALTER COLUMN SET NOT NULL ALTER TABLE ADD REFERENTIAL CONSTRAINT ALTER TABLE ADD CONSTRAINT ALTER TABLE ADD UNIQUE CONSTRAINT包含重组建议的操作的 ALTER TABLE 语句的示例除了对执行包含重组建议的操作的 ALTER TABLE 语句之后的表访问进行限制外,在执行传统重组之前并且在其他重组建议的操作成功之前,DB2 数据库管理器只允许您指定三个重组建议的操作。为此,应该编码每个包含重组建议的操作的 ALTER TABLE 语句,以尽可能地更改多列的属性。例如,如果按下列顺序指定都只包含一个重组建议的操作的 ALTER TABLE 语句,则在执行传统重组之前,将无法指定需要新行格式的任何后续 ALTER TABLE 语句: ALTER TABLE foo DROP COLUMN C1 ALTER TABLE foo DROP COLUMN C2 ALTER TABLE foo DROP COLUMN C3然而,您可以将这三个 ALTER TABLE 语句替换为以下一个语句: ALTER TABLE foo DROP COLUMN C1 DROP COLUMN C2 DROP COLUMN C3由于使用一个 SQL 语句只能改变每列的一个属性(例如,类型或可空性),所以将一列更改为新格式可能需要使用多个包含重组建议的操作的 ALTER TABLE 语句。在这种情况下,改变的顺序很重要,要确保一个改变不能由于重组暂挂状态而排除另一个改变。这表示应该使用第一个包含重组建议的操作的 ALTER TABLE 语句来执行需要表数据访问的操作。例如,如果列 C1 是整型的并且可空,您想将此列更改为不可空的 BIGINT,则下列顺序将失败: ALTER TABLE bar ALTER COLUMN C1 SET DATA TYPE BIGINT ALTER TABLE bar ALTER COLUMN C1 SET NOT NULL失败的原因是第二个 ALTER TABLE 语句需要扫描列 C1 以查看是否有任何行包含值 NULL。由于表在第一个语句之后处于重组暂挂状态,所以不能执行第二个语句的扫描。但是,下列顺序将成功,因为第一个语句不访问数据并且不使表处于重组暂挂状态: ALTER TABLE bar ALTER COLUMN C1 SET NOT NULL ALTER TABLE bar ALTER COLUMN C1 SET DATA TYPE BIGINT无论指定了多少个重组建议的操作,都可以执行许多改变表但不组成重组建议的操作的操作。这些主要功能包括: ADD COLUMN ALTER COLUMN DEFAULT VALUE RENAME TABLE ALTER COLUMN SET DATA TYPE VARCHAR/VARGRAPHIC/CLOB/BLOB/DBCLOBALTER TABLE 执行期间的并行性因为任何 ALTER TABLE 语句都修改内存中的结构,所以它需要具有对表的互斥访问权。对于某些语句选项,特别是 ALTER TYPE 和 DROP COLUMN,将专门为 UPDATE 或 DELETE 锁定表目录中的行。为此,在 ALTER TABLE 语句完成之后,必须要尽快地落实或回滚包含该语句的工作单元。ALTER TABLE 权限注意事项在使用包含重组建议的操作的 ALTER TABLE 语句之后,必须使用一般 REORG TABLE 语句来使表重新可以访问。具有对表的 ALTER 权限并不一定表示您有权使用 REORG TABLE 语句;您必须具有 REORG 权限。删除列时 CASCADE 和 RESTRICT 的语义删除一列时,DB2 必须确保还将更新依赖于该列的所有数据库对象(例如,视图、触发器和索引)。指定 ALTER TABLE DROP COLUMN 语句时提供了两个选项:CASCADE 和 RESTRICT。这些选项影响将如何更新从属数据库对象。CASCADE 缺省值 CASCADE 自动删除依赖于删除列的数据库对象。只有在您充分了解了这种操作的全部影响时才应使用 CASCADE。如果您未能很好地理解数据库对象的依赖性,则使用 CASCADE 选项可能会导致性能下降,因为它会隐式删除索引。其他方面的影响包括:DML 在已标记为不可用的视图上失败,或者由于不可用触发器而产生的数据完整性问题。下列对象是在使用 CASCADE 时隐式删除的: 标识属性 SQL 例程 索引 唯一约束 触发器 外键约束 主键约束(这同样会导致隐式删除任何从属外键约束) 检查约束 生成列数据 视图 程序包 RESTRICT 如果发现程序包之外的任何数据库对象依赖于要删除的列,则 RESTRICT 将导致 ALTER TABLE 语句失败。通常难以生成特定列的完整从属对

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论