插件窝 干货文章 SQL如何修改已添加列的默认值?

SQL如何修改已添加列的默认值?

TABLE 默认 ALTER 列名 80    来源:    2025-03-28

修改SQL表中已存在列的默认值

要修改SQL表中已存在列的默认值,可以使用ALTER TABLE语句。不同数据库系统的语法略有不同,以下是几种主流数据库的实现方式:

MySQL/MariaDB

ALTER TABLE 表名 
ALTER COLUMN 列名 SET DEFAULT 新默认值;

示例:

ALTER TABLE users 
ALTER COLUMN created_at SET DEFAULT CURRENT_TIMESTAMP;

PostgreSQL

ALTER TABLE 表名 
ALTER COLUMN 列名 SET DEFAULT 新默认值;

示例:

ALTER TABLE products 
ALTER COLUMN price SET DEFAULT 0.00;

SQL Server

ALTER TABLE 表名 
ADD CONSTRAINT 约束名 DEFAULT 新默认值 FOR 列名;

注意:SQL Server需要先删除原有的默认约束,再添加新的

-- 1. 查找现有默认约束名
SELECT name FROM sys.default_constraints
WHERE parent_object_id = OBJECT_ID('表名') AND parent_column_id = COLUMNPROPERTY(OBJECT_ID('表名'), '列名', 'ColumnId');

-- 2. 删除现有约束
ALTER TABLE 表名 DROP CONSTRAINT 约束名;

-- 3. 添加新默认值
ALTER TABLE 表名 ADD CONSTRAINT 新约束名 DEFAULT 新默认值 FOR 列名;

Oracle

ALTER TABLE 表名 
MODIFY (列名 DEFAULT 新默认值);

示例:

ALTER TABLE orders 
MODIFY (status DEFAULT 'PENDING');

SQLite

SQLite不支持直接修改列的默认值。你需要:

  1. 创建新表
  2. 复制数据
  3. 删除旧表
  4. 重命名新表
-- 1. 创建临时表
CREATE TABLE temp_table_name (
    -- 包含所有列定义,修改需要的默认值
);

-- 2. 复制数据
INSERT INTO temp_table_name SELECT * FROM original_table;

-- 3. 删除原表
DROP TABLE original_table;

-- 4. 重命名临时表
ALTER TABLE temp_table_name RENAME TO original_table;

注意事项: - 修改默认值不会影响表中已存在的行,只会影响后续插入的行 - 在某些数据库中,默认值必须与列的数据类型兼容 - 在生产环境执行前,建议先在测试环境验证