Oracle数据库中对已存在的表添加字段、修改字段长度或类型等操作

在Oracle数据库中,给表添加字段、修改字段长度或类型等操作是通过ALTER TABLE语句来完成的。以下是一些常见的操作示例:

1. 创建一张表employees

CREATE TABLE EMPLOYEES (
FIRST_NAME       VARCHAR(20),
LAST_NAME        VARCHAR(25) CONSTRAINT EMP_LAST_NAME_NN NOT NULL ,
PHONE_number     VARCHAR(20),
HIRE_DATE        DATE  CONSTRAINT EMP_HIRE_DATE_NN NOT NULL 
);

这个表从设计规范来说,是没有主键ID,因此需要添加一个主键字段EMPLOYEE_ID数字类型

2. 给表添加主键约束及备注信息

-- 添加主键约束字段EMPLOYEE_ID
ALTER TABLE EMPLOYEES ADD EMPLOYEE_ID NUMBER(6,0) CONSTRAINT EMP_EMP_ID_PK PRIMARY KEY;

-- 添加备注
COMMENT ON COLUMN EMPLOYEES.EMPLOYEE_ID IS 'Primary key of employees table.';

2. 给表添加字段

假设你有一个名为employees的表,你想要给这个表添加一个名为email的字段,类型为VARCHAR2(100)

-- 添加email字段
ALTER TABLE employees ADD email VARCHAR2(100);

-- 添加email字段备注信息
COMMENT ON COLUMN EMPLOYEES.EMAIL IS 'Email id of the employee';

3. 修改字段长度

如果你想要修改employees表中email字段的长度为255,可以使用以下语句:

ALTER TABLE employees MODIFY (email VARCHAR2(128));

-- 查看表字段信息
HR@ORCL> DESC EMPLOYEES;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 FIRST_NAME                                         VARCHAR2(20)
 LAST_NAME                                 NOT NULL VARCHAR2(25)
 PHONE_NUMBER                                       VARCHAR2(20)
 HIRE_DATE                                 NOT NULL DATE
 EMPLOYEE_ID                               NOT NULL NUMBER(6)
 EMAIL                                              VARCHAR2(128)

注意:不是所有的字段类型都可以直接修改长度或大小,比如如果你尝试修改一个NUMBER类型的字段的“长度”(尽管NUMBER类型并不真正有“长度”的概念,这里只是举个例子),你可能需要采用不同的方法或考虑数据类型的转换。

4. 修改字段类型

修改字段类型通常比较复杂,因为Oracle需要确保修改后的类型能够兼容现有数据。假设employees表中有一个HIRE_DATE字段,当前类型为DATE,但你想要将其更改为TIMESTAMP类型(以存储更精确的时间信息):

ALTER TABLE employees MODIFY (HIRE_DATE TIMESTAMP);

但是,这种直接的修改可能会因为数据类型不兼容而失败(尽管在这个特定的例子中,从DATETIMESTAMP的转换通常是可行的)。如果字段包含的数据无法直接转换为新类型,你可能需要先删除该字段(如果允许空值),然后以新类型重新添加该字段,或者使用其他数据迁移技术。

5、查看表结构

HR@ORCL> DESC EMPLOYEES;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 FIRST_NAME                                         VARCHAR2(20)
 LAST_NAME                                 NOT NULL VARCHAR2(25)
 PHONE_NUMBER                                       VARCHAR2(20)
 HIRE_DATE                                 NOT NULL TIMESTAMP(6)
 EMPLOYEE_ID                               NOT NULL NUMBER(6)
 EMAIL                                              VARCHAR2(128)

6、查看表备注信息

HR@ORCL> select * from user_col_comments where table_name='EMPLOYEES';

TABLE_NAME           COLUMN_NAME          COMMENTS                                                     ORIGIN_CON_ID
-------------------- -------------------- ------------------------------------------------------------ -------------
T_EMPLOYEES          EMPLOYEE_ID          Primary key of employees table.                                          0
T_EMPLOYEES          EMAIL                Email id of the employee                                                 0
T_EMPLOYEES          FIRST_NAME                                                                                    0
T_EMPLOYEES          LAST_NAME                                                                                     0
T_EMPLOYEES          PHONE_NUMBER                                                                                  0
T_EMPLOYEES          HIRE_DATE                                                                                     0

6 rows selected.

注意事项

  • 在进行这些操作之前,请确保你有足够的权限来修改表结构。
  • 修改表结构可能会对数据库性能产生影响,特别是在大型表上。在生产环境中进行此类更改之前,请务必在测试环境中验证更改的影响。
  • 考虑到数据完整性和应用程序兼容性,在修改字段类型或长度之前,请确保这些更改不会破坏现有数据或导致应用程序出错。
  • 某些类型的修改(如将NOT NULL字段更改为允许NULL)可能不需要额外的步骤,但将NULL字段更改为NOT NULL可能需要确保所有现有记录都符合新约束,这可能需要更新数据或添加默认值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值