You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL中如何创建含默认当前日期(非Timestamp)字段的表?

如何创建默认值为当前日期的DATE类型字段表

当然可以创建默认值为当前日期的DATE类型字段表,你遇到的语法错误是因为MySQL版本的兼容性问题。

问题原因

你的SQL里entry_date DATE DEFAULT CURRENT_DATE的写法在低版本MySQL中不被支持:

  • MySQL 8.0.13及以上才允许直接用CURRENT_DATE作为DATE字段的默认值
  • 5.7及更早版本需要用带括号的函数形式CURRENT_DATE(),且要确保服务器允许函数作为默认值(默认是允许的)
  • 另外你status字段的DEFAULT 'present' NOT NULL顺序不规范,应该先写NOT NULL再写DEFAULT

修正后的SQL(适用于MySQL 5.7及以上)

CREATE TABLE animal (
    animal_id INT AUTO_INCREMENT PRIMARY KEY,
    animal_name VARCHAR(50) NOT NULL,
    animal_type VARCHAR(50) NOT NULL,
    species VARCHAR(50) NOT NULL,
    gender VARCHAR(10),
    entry_date DATE DEFAULT CURRENT_DATE(),
    status VARCHAR(10) NOT NULL DEFAULT 'present'
);

如果是MySQL 5.6及更早版本

这类版本不支持DATE字段用函数作为默认值,需要通过触发器实现:

-- 先创建表,entry_date暂不设置默认值
CREATE TABLE animal (
    animal_id INT AUTO_INCREMENT PRIMARY KEY,
    animal_name VARCHAR(50) NOT NULL,
    animal_type VARCHAR(50) NOT NULL,
    species VARCHAR(50) NOT NULL,
    gender VARCHAR(10),
    entry_date DATE,
    status VARCHAR(10) NOT NULL DEFAULT 'present'
);

-- 创建插入触发器,自动填充当前日期
DELIMITER //
CREATE TRIGGER set_entry_date BEFORE INSERT ON animal
FOR EACH ROW
BEGIN
    IF NEW.entry_date IS NULL THEN
        SET NEW.entry_date = CURRENT_DATE();
    END IF;
END //
DELIMITER ;

内容的提问来源于stack exchange,提问作者Cherry Liu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 21:22:43