MySQL 常用 DEFAULT 默认值一览表

⚠️ 注意:CURRENT_TIMESTAMP 不要加引号 ,写成 DEFAULT CURRENT_TIMESTAMP,写成 'CURRENT_TIMESTAMP' 会当成普通字符串,不是时间函数。

MySQL5.6.5+ 才支持 DATETIME 使用 CURRENT_TIMESTAMP;MySQL8.0 支持表达式默认值(需要包括号 DEFAULT (xxx))

一、时间类系统默认值(你重点关心的)

默认值写法 适用字段类型 说明 示例
CURRENT_TIMESTAMP TIMESTAMP / DATETIME 当前时间戳(日期+时分秒),插入时自动赋值 created_at DATETIME DEFAULT CURRENT_TIMESTAMP
CURRENT_TIMESTAMP(n) TIMESTAMP(n) / DATETIME(n) 带微秒,n=0~6 dt DATETIME(3) DEFAULT CURRENT_TIMESTAMP(3)
CURRENT_DATE DATE 当前日期(只有年月日),MySQL8.0+支持 ct_date DATE DEFAULT (CURRENT_DATE)
CURRENT_TIME TIME 当前时间(时分秒),MySQL8.0+支持 t TIME DEFAULT (CURRENT_TIME)
ON UPDATE CURRENT_TIMESTAMP TIMESTAMP / DATETIME 不是DEFAULT,是附加属性:该行其他字段更新时,自动刷新为本字段时间 updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

❗ 坑:NOW() / SYSDATE() 不能直接放在 DEFAULT 里 (MySQL5.7不支持,8.0可以写 DEFAULT (NOW()),但推荐统一用 CURRENT_TIMESTAMP)

二、常量默认值(所有版本通用)

默认值 适用类型 说明
NULL 任意允许NULL字段 默认空,col VARCHAR(20) DEFAULT NULL
''(空字符串) CHAR/VARCHAR/TEXT 字符串空值
0 TINYINT/INT/BIGINT/FLOAT 数字默认0
1 / -1 / 99 数值型 自定义固定数字
'固定字符串' VARCHAR/CHAR 固定文本,如 'unknown'
'0000-00-00' DATE DATE零值(sql_mode严格模式下不推荐)
'0000-00-00 00:00:00' DATETIME/TIMESTAMP 时间零值(严格模式报错)

三、MySQL8.0+ 支持【表达式默认值】(必须带括号)

默认表达式 字段类型 说明
DEFAULT (UUID()) CHAR/VARCHAR 默认生成UUID字符串
DEFAULT (UUID_TO_BIN(UUID())) BINARY(16) UUID转二进制存储
DEFAULT (RAND()) FLOAT 默认随机数0~1
DEFAULT (JSON_ARRAY()) JSON 默认空json数组
DEFAULT (CURRENT_DATE + INTERVAL 1 DAY) DATE 默认明天日期

四、各类型隐式默认值(不写DEFAULT时自动自带)

字段类型 不写DEFAULT的隐式默认值
INT/TINYINT/BIGINT 0(NOT NULL);NULL(允许NULL)
VARCHAR/CHAR ''(NOT NULL);NULL(允许NULL)
DATE 0000-00-00(NOT NULL);NULL
DATETIME 0000-00-00 00:00:00(NOT NULL);NULL
TIMESTAMP 受 explicit_defaults_for_timestamp 参数影响

常用建表示例

sql 复制代码
CREATE TABLE test(
  id INT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(32) DEFAULT '',
  status TINYINT DEFAULT 1,
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  create_date DATE DEFAULT (CURRENT_DATE),
  uuid_col CHAR(36) DEFAULT (UUID())
);
相关推荐
L00131 分钟前
MySQL5.7 DATE 字段无法设置默认日期?用触发器搞定|个人任务清单项目实战
mysql
不像程序员的程序媛2 小时前
导出mysql数据结构
数据库·mysql
鱼很腾apoc3 小时前
【MySQL】第4期 用户管理与 C 语言连接编程详解
linux·服务器·c语言·mysql·connector/c
郭萌6963 小时前
多商户平台的分销佣金:为什么同一笔订单,换个时间跑会算出另一个人
mysql·php
库库的数据库笔记4 小时前
金融核心交易系统的数据库国产信创改造该如何做?
大数据·数据库·分布式·mysql·oracle·金融·数据库架构
Linux实战笔记4 小时前
MySQL 索引失效的三种典型场景与 EXPLAIN 分析
mysql·索引失效·explain·执行计划·sql 调优
这个DBA有点耶4 小时前
连接数没满,应用却连不上数据库——TCP backlog溢出与somaxconn的隐藏限制
数据库·mysql·代码规范
小羊没烦恼!5 小时前
C#综合揭秘——Entity Framework 并发处理详解
java·开发语言·前端·javascript·数据库·mysql·c#
flytalei6 小时前
从 Docker Compose 到 K3s:逐浪博客 MySQL 数据迁移实战与一致性验证
mysql·docker·容器
SL_staff7 小时前
3分钟上线新规则:业务人员拖拽完成合同超期自动暂停服务
java·mysql·全栈