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
相关产品推荐
相关产品推荐

