如何设置字段默认值_mysql default语法

来源:这里教程网 时间:2026-02-28 20:33:47 作者:

在 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;
旧版本(如 MySQL 5.7)可用:
ALTER TABLE users MODIFY COLUMN level TINYINT DEFAULT 1;
(会重定义整列,需确保类型不变)

NULL 和 DEFAULT 的关系要分清

DEFAULT
是插入时未显式赋值才生效的兜底值;
NULL
是一个特殊标记,不代表“空字符串”或“零”。两者独立:

name VARCHAR(50) DEFAULT 'anonymous' NOT NULL
:不给值就填 'anonymous',且禁止存 NULL
remark TEXT DEFAULT NULL
:不给值就存 NULL(这也是 TEXT 类型的默认行为)
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
:既设默认值,又支持自动更新

常见注意事项

实际使用中容易踩坑,需留意以下几点:

只有
INSERT
语句中完全省略该字段,或显式写
DEFAULT
,才会触发默认值(如
INSERT INTO t(a) VALUES(DEFAULT);
如果字段允许 NULL 且没设 DEFAULT,插入时省略它,结果就是 NULL,不是空字符串或 0 带函数的默认值(如
CURRENT_TIMESTAMP
)不能加括号(
CURRENT_TIMESTAMP()
在 DEFAULT 中非法)
MySQL 8.0.13 起支持表达式默认值,如
price DECIMAL(10,2) DEFAULT (cost * 1.1)
,但要求是确定性表达式

相关推荐