首页/数据/SQL 速查/改列定义与改类型
本包目录(311 条)
查询基础33 条连接与子查询40 条聚合与窗口函数54 条函数速查60 条
变更与事务52 条
性能与执行计划72 条

改列定义与改类型

修改列的类型/可空性/默认值:MySQL 用 MODIFY(可同时改名用 CHANGE),PostgreSQL 用 ALTER COLUMN 分动作执行。

SQL 速查数据更新于 2026-10-12

MySQL

MySQL
ALTER TABLE users MODIFY COLUMN age INT NOT NULL DEFAULT 0;
ALTER TABLE users CHANGE COLUMN age user_age INT NOT NULL DEFAULT 0;   -- 改名+改类型

PostgreSQL

PostgreSQL
ALTER TABLE users ALTER COLUMN age SET NOT NULL;
ALTER TABLE users ALTER COLUMN age SET DEFAULT 0;
ALTER TABLE users ALTER COLUMN age TYPE integer USING age::integer;   -- 显式转换
MySQLMODIFY 必须写完整新定义(漏写的部分会按默认处理)
PostgreSQLSET NOT NULL 需要先扫全表校验(无有效 CHECK 时)
转换PG 改类型可用 USING 表达式处理脏数据

易错点

  • MySQL 的 MODIFY 是“覆盖式”定义:只写类型忘了 NOT NULL/默认值,会把原约束悄悄丢掉
  • 收缩长度/降精度前先用 SELECT 检查超限数据;严格模式报错、非严格模式截断,两库处理都要预演

数据来源与参考

  • MySQL 8.0 Reference Manual · ALTER TABLE
  • PostgreSQL Documentation · ALTER TABLE
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌