更改表,在oracle

时间:2019-06-03 12:57:17

标签: sql oracle oracle12c

更改包含约1000万行的表的语句是什么,添加一个guid列,该列将为每一行保留唯一的标识符(而不是pk的一部分)

全局唯一标识符列应为哪种数据类型? 有创建它的程序吗? 每次插入新记录时,它将如何自动递增或产生?

2 个答案:

答案 0 :(得分:2)

将其分为几个单独的阶段

首先,我们需要一个新列:

alter table MyTable
add guid_column raw(32) default sys_guid();

然后更新现有行:

update MyTable
set guid_column = sys_guid();

答案 1 :(得分:1)

  1. 使用oracle 12c的标识列功能将一列添加到表中,该列在向表中添加新行时会自动递增。
  2. 处理此任务的理想方法是: a)使用带有新的“标识列”的CREATE TABLE AS(CTAS语句)创建一个结构类似于源表的“新”表,而不是使用ALTER语句在现有表上添加标识列。 b)与在现有表上运行ALTER相比,CTAS的工作速度更快。 c)确认“新”表具有源表中的所有数据以及包含唯一值以及所有索引和约束的列之后,可以删除原始表。

另一种避免创建约束的方法是将原始表上存在的索引添加到新表上,即创建一个具有所有约束,索引和标识列的空表。让DBA从原始表中提取数据并将其导入“新”表中。

好处: 这种方法将确保依赖于源表的对象都不会变为无效,这通常会妨碍应用程序的某些功能。