如何解决MySQL中的‘Error 1364:字段‘Date’无默认值’错误?
解决MySQL Error 1364: field 'Date' doesn't have a default value 问题
问题根源
你的核心错误是将插入操作拆成了三次独立的INSERT语句,每次仅插入单个字段,但表中EnrollmentId、Date、SchoolId三个字段都被标记为NOT NULL。MySQL的INSERT是针对整行数据的操作:第一次插入EnrollmentId时,Date和SchoolId没有值,直接违反NOT NULL约束触发1364错误,后续语句根本无法执行。关闭严格模式无效,因为NOT NULL约束本身要求字段必须赋值,和严格模式无关。
另外注意:你使用的日期格式'03/01/2023'(MM/DD/YYYY)不符合MySQL默认的DATETIME格式(YYYY-MM-DD HH:MM:SS),直接插入会导致日期解析错误,需要转换格式。
正确解决方案
将每行的三个字段值放在同一个INSERT语句中,一次性插入完整的行数据,同时用STR_TO_DATE函数转换日期格式:
INSERT INTO enrollment (EnrollmentId, Date, SchoolId) VALUES ('pegsue5687', STR_TO_DATE('03/01/2023', '%m/%d/%Y'), 'tafesa87678645'), ('dangia4965', STR_TO_DATE('03/05/2023', '%m/%d/%Y'), 'tafesa87678645'), ('leegun3465', STR_TO_DATE('03/06/2023', '%m/%d/%Y'), 'tafesa87678645'), ('harkan5690', STR_TO_DATE('03/04/2023', '%m/%d/%Y'), 'tafesa87678645'), ('donsal8774', STR_TO_DATE('03/07/2023', '%m/%d/%Y'), 'tafesa87678645');
补充说明
如果确实需要分批次补全数据(比如先插入ID,后续再补日期和学校ID),必须修改表结构:要么去掉对应字段的NOT NULL约束,要么给字段设置合理的默认值,但这违背了你最初的表设计逻辑。因此优先推荐插入完整行数据的方案。
内容的提问来源于stack exchange,提问作者Kudos
相关产品推荐
相关产品推荐

