oracle添加列

本文介绍如何使用SQL命令向已存在的Oracle表中添加新的列。通过示例演示了具体的语法及应用,例如向表A中增加名为C的新列,并指定其为Varchar2(20)类型。

alter   table   Tablename   add(column1   varchar2(20),column2   number(7,2)...)  
  比如:  
  已有表A,结构如下  
    字段名                         类型  
    ------------   -------------  
    A                           VARCHAR2(10)  
    B                           NUMBER  
  现在要增加一列C,类型是Varchar2(20)则:  
  alter   table   a   add(C   varchar2(20));

Oracle 数据库中,可以使用 `ALTER TABLE` 语句为已存在的表添加。以下是详细的语法和示例。 ### 添加的基本语法: ```sql ALTER TABLE table_name ADD (column_name data_type [DEFAULT value] [column_constraint]); ``` --- ### 示例:向表中添加 假设我们有一个名为 `employees` 的表,现在要为其添加几个新: #### 1. 添加一个普通(如 `email`) ```sql ALTER TABLE employees ADD (email VARCHAR2(100)); ``` #### 2. 添加带默认值的(如 `status` 默认为 'ACTIVE') ```sql ALTER TABLE employees ADD (status VARCHAR2(20) DEFAULT 'ACTIVE'); ``` > ⚠️ 注意:如果表中已有数据,新添加对已有行显示为 NULL(除非指定了 DEFAULT),但后续插入时会使用默认值。 #### 3. 添加多个(一次性添加) ```sql ALTER TABLE employees ADD ( birth_date DATE, salary NUMBER(10,2) DEFAULT 5000.00, department VARCHAR2(50) ); ``` #### 4. 添加 `NOT NULL` (需配合默认值) Oracle 不允许直接为已有数据的表添加 `NOT NULL` (除非提供默认值且处理空值)。正确做法是: ```sql ALTER TABLE employees ADD (is_active CHAR(1) DEFAULT 'Y' NOT NULL); ``` 这样,旧记录将使用 `'Y'` 作为默认值,满足 `NOT NULL` 约束。 --- ### 解释: - `ALTER TABLE employees`: 指定要修改的表。 - `ADD (...)`: 添加一个或多个。 - `VARCHAR2(n)`、`NUMBER`、`DATE` 是 Oracle 常用的数据类型。 - `DEFAULT` 子句用于指定新的默认值,对已有行生效。 - 如果添加 `NOT NULL` 而没有默认值,Oracle 会报错 `ORA-01758`(不能在非空表中添加强制非空字段)。 --- ### 相关注意事项: 1. **性能影响**:添加本身很快(只是更新数据字典),但如果加了默认值,查询时 Oracle 会在底层“虚拟填充”旧数据。 2. **DEFAULT 对历史数据的影响**:从 Oracle 9i 起,添加带默认值的时,旧行不会物理写入该值,而是查询时动态返回默认值(称为“虚拟默认值”),直到该行被更新。 3. **约束支持**:可添加 `UNIQUE`、`CHECK` 等约束,但 `PRIMARY KEY` 和 `FOREIGN KEY` 需单独定义。 --- ### 扩展示例:添加并立即添加注释 ```sql -- 添加 ALTER TABLE employees ADD (hire_source VARCHAR2(30) DEFAULT 'REFERRAL'); -- 添加说明 COMMENT ON COLUMN employees.hire_source IS '员工入职来源,如招聘网站、内推等'; ``` --- ### 如何验证添加? ```sql DESCRIBE employees; -- 或查询数据字典 SELECT column_name, data_type, data_default, nullable FROM user_tab_columns WHERE table_name = 'EMPLOYEES'; ``` 注意:表名在 `user_tab_columns` 中通常是大写的。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值