0

考虑一下我在 Oracle 10G 中创建的这个初始表:

╔═════════════════════════════════╗
║  CUSTOMER_ID ACC_NO ACC_BALANCE ║
╠═════════════════════════════════╣
║         100    200        1000  ║
║         101    150        4000  ║
║         102    350        2000  ║
║         103    450        2500  ║
║         104    550        2200  ║
╚═════════════════════════════════╝

现在我想在表中添加另一列customer_name。我用了:

ALTER TABLE BANK_ACCOUNT 
  ADD (CUSTOMER_NAME VARCHAR2(30)); 

并且该列作为表中的最后一列插入,而我希望将该列作为第二列添加到表中。现在我提到的 SQL 代码无法做到这一点。那么如何在指定位置添加列?在 SQL 中甚至有可能吗?

4

1 回答 1

1

列的物理位置实际上并不重要select,因为它将允许您指定检索它们的顺序(逻辑上)。

而且,如果您使用select *which 不允许您指定顺序,您可能不应该这样做。在极少数情况下您应该这样做(例如 DB 分析工具),大多数情况下最好选择您想要的各个列,即使您想要所有列。这使您可以快速捕获架构更改,以便您可以使程序适应它们。

在任何情况下,SQL 本身都不保证返回列的顺序,除非您明确列出它们。select *可能今天按顺序给您,明天按字母顺序给您。即使特定的实现允许您这样做(通过在“正确”位置创建具有列的新表并复制数据,或提供类似的 SQL 扩展名alter table T insert column C1 before C2),我建议不要这样做。它不能移植到其他实现,我更喜欢让我的代码尽可能地移植。

此外,除了您可以在 SQL 中指定的内容之外,DBMS 应该能够完全控制存储数据的方式。您的主键可能是第 7 列和第 42 列的组合,将它们放在物理记录的前面可能更有效。

于 2013-09-15T05:23:27.467 回答