在Oracle数据库的日常使用中,为表字段设置默认值可以简化数据插入流程,当插入数据未指定该字段值时,数据库会自动填充预设的默认值,减少不必要的空值出现,也能保证业务规则的一致性。

Oracle设置默认值的两种核心方法
1. 创建表时直接设置默认值
在通过CREATE TABLE语句新建表时,可以在字段定义后直接添加DEFAULT关键字指定默认值,这种方式适用于新表的初始设计阶段。
示例代码如下:
-- 创建用户表,为状态字段设置默认值1,创建时间字段设置默认当前时间
CREATE TABLE user_info (
user_id NUMBER(10) PRIMARY KEY,
user_name VARCHAR2(50) NOT NULL,
user_status NUMBER(1) DEFAULT 1, -- 默认状态为正常
create_time DATE DEFAULT SYSDATE, -- 默认创建时间为当前系统时间
remark VARCHAR2(200)
);
执行上述语句后,插入数据时如果不指定user_status和create_time字段的值,Oracle会自动填充1和当前时间。
2. 为已存在的表字段添加默认值
如果表已经创建完成,需要为已有字段添加默认值或者修改现有默认值,可以使用ALTER TABLE语句配合MODIFY子句实现。
示例代码如下:
-- 为已有表的remark字段设置默认值'无备注' ALTER TABLE user_info MODIFY remark DEFAULT '无备注'; -- 修改user_status字段的默认值为0 ALTER TABLE user_info MODIFY user_status DEFAULT 0;
设置默认值的注意事项
- 默认值只对后续新插入的数据生效,不会修改表中已经存在的旧数据。如果旧数据的对应字段为NULL,需要手动执行更新语句填充值。
- 默认值的数据类型必须和字段定义的数据类型兼容,比如数值类型字段不能设置字符串类型的默认值,否则会抛出类型不匹配的错误。
- 如果字段已经设置了默认值,再次执行
MODIFY语句设置新的默认值,会直接覆盖原有默认值,不需要先删除旧默认值。 - 默认值可以设置为常量,也可以设置为函数返回值,比如
SYSDATE、USER等系统函数,但不支持设置为其他表的字段值或者复杂的子查询。
默认值相关验证示例
我们可以通过插入测试数据验证默认值是否生效:
-- 插入数据时不指定user_status、create_time、remark字段 INSERT INTO user_info (user_id, user_name) VALUES (1, '张三'); -- 查询插入的数据,验证默认值是否生效 SELECT user_id, user_name, user_status, create_time, remark FROM user_info WHERE user_id = 1;
查询结果中user_status会显示为0,create_time为插入数据时的系统时间,remark为'无备注',说明默认值设置生效。
删除字段默认值
如果不再需要某个字段的默认值,可以通过ALTER TABLE语句将默认值设置为NULL来实现删除效果:
-- 删除user_status字段的默认值 ALTER TABLE user_info MODIFY user_status DEFAULT NULL;
执行后插入数据不指定user_status字段时,该字段值会为NULL,不再使用之前的默认值。
Oracle默认值字段属性ALTER_TABLEDEFAULT修改时间:2026-06-30 16:36:25