

新闻资讯
技术学院MySQL中设置字段默认值主要通过DEFAULT关键字实现,可在CREATE TABLE或ALTER TABLE时指定,支持常量、函数(如CURRENT_TIMESTAMP)及标量表达式(8.0.13+),需注意NULL与DEFAULT的独立性及触发条件。
在 MySQL 中设置字段默认值,主要通过 DEFAULT 关键字实现,可在建表(CREATE TABLE)或修改表结构(ALTER TABLE)时指定。
这是最常用的方式,在定义列时用 DEFAULT 指定默认值。支持常量、函数(如 CURRENT_TIMESTAMP)、表达式(MySQL 8.0.13+ 支持标量表达式)。
DEFAULT 'unknown'
DEFAULT 0 或 DEFAULT -1
CURRENT_TIMESTAMP,如 created_at DATETIME DEFAULT CURRENT_TIMESTAMP
NOT NULL 字段若没设默认值且插入时未提供值,会报错;设了 DEFAULT 后可安全省略该字段使用 ALTER TABLE ... ALTER COLUMN ... SET DEFAULT(MySQL 8.0+ 推荐语法),或兼容性更强的 MODIFY COLUMN/CHANGE COLUMN 方式。
ALTER TABLE users ALTER COLUMN status SET DEFAULT 'active';
ALTER TABLE users ALTER COLUMN score SET DEFAULT 100;
ALTER TABLE users ALTER COLUMN email DROP DEFAULT;
ALTER TABLE users MODIFY COLUMN level TINYINT DEFAULT 1;(会重定义整列,需确保类型不变)DEFAULT 是插入时未显式赋值才生效的兜底值;NULL 是一个特殊标记,不代表“空字符串”或“零”。两者独立:
name VARCHAR(50) DEFAULT 'anonymous' NOT NULL:不给值就填 'anonymous',且禁止存 NULLremark TEXT DEFAULT NULL:不给值就存 NULL(这也是 TEXT 类型的默认行为)updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP:既设默认值,又支持自动更新实际使用中容易踩坑,需留意以下几点:
INSERT 语句中完全省略该字段,或显式写
DEFAULT,才会触发默认值(如 INSERT INTO t(a) VALUES(DEFAULT);)CURRENT_TIMESTAMP)不能加括号(CURRENT_TIMESTAMP() 在 DEFAULT 中非法)price DECIMAL(10,2) DEFAULT (cost * 1.1),但要求是确定性表达式