考虑一下我在 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 中是否可以实现?
确实没有matter该列的物理位置是select
将允许您指定检索它们的顺序(逻辑上)。
而且,如果您正在使用select *
它不允许您指定顺序,您可能不应该这样做。在极少数情况下您应该这样做(例如数据库分析工具),大多数时候最好选择您想要的各个列,即使您想要全部列。这使您可以快速捕获架构更改,以便您可以使您的程序适应它们。
无论如何,SQL 本身不保证返回列的顺序,除非您明确地列出它们。select *
今天可能会按顺序,明天会按字母顺序给您。即使特定的实现允许您这样做(通过创建一个新表,其中列位于“正确”的位置并复制数据,或者提供 SQL 扩展,例如alter table T insert column C1 before C2
),我建议不要这样做。它不能移植到其他实现,我更喜欢让我的代码尽可能可移植。
此外,除了您可以在 SQL 中指定的内容之外,DBMS 还应该能够完全控制how它存储数据。您的主键可能是第七列和第四十列的组合,将它们放在物理记录的前面可能会更有效。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)