假设我的表 Tb 中已经有 3 列 A、B、C。我想在 B 和 C 之间添加一个新列 M。我该怎么做?
添加 M 后,我的表格应该看起来像 - ABMC 而不是 ABCM ?
假设我的表 Tb 中已经有 3 列 A、B、C。我想在 B 和 C 之间添加一个新列 M。我该怎么做?
添加 M 后,我的表格应该看起来像 - ABMC 而不是 ABCM ?
简单的答案是你不能。列总是在最后添加。但是,您不应该关心表中列的顺序,因为您应该始终在查询和 DML 中明确列出列。并且您应该始终有一个界面层(例如视图),如果顺序很重要,您可以在适当的位置添加新列。
如果你真的下定了决心,可以新建一个列序的新表,将数据移到新表中,删除旧表,重命名新表。您需要在表上重新创建任何索引、约束或触发器。就像是
ALTER TABLE tb
ADD( M NUMBER );
CREATE TABLE tb_new
AS
SELECT a, b, m, c
FROM tb;
DROP TABLE tb;
ALTER TABLE tb_new
RENAME TO tb;
我不确定它是否是 Express Edition 中的一个选项(我倾向于怀疑它是,但我没有方便验证的 XE 数据库),但您也可以使用Barbara 在该示例中显示的DBMS_REDEFINITION
包。在幕后,Oracle 与上面所做的基本相同,但添加了一些物化视图日志,以允许应用程序在操作期间继续访问表。
但是,如果您发现自己关心表格中列的顺序,那么最好停下来找出自己做错了什么,而不是继续在任一路径上前进。您应该非常非常罕见地关心表中列的物理顺序。