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

如何使用SQL向App.settings表插入数据?我的语句是否正确?

你的INSERT语句问题分析&修复方案

嘿,咱们来拆解下你遇到的问题:你的插入语句执行报错,主要是两个核心原因导致的:

1. 省略字段列表的隐患 + DEFAULT关键字的误用

首先,你没在INSERT语句里指定要插入的字段列表——虽然目前你的值顺序和表结构的字段顺序刚好匹配,但这种写法非常脆弱,哪天表结构调整(比如新增字段、调整字段顺序),这条语句直接就会失效。

其次,问题的关键出在DEFAULT上:看你的表结构,email_frequency字段的默认值是NULL(且允许为NULL),但MySQL在严格模式(这是5.7版本之后的默认运行模式)下,对没有显式定义默认值的字段使用DEFAULT会触发报错——因为MySQL会认为你要调用字段的预设默认值,但这个字段只有隐式的NULL默认值,严格模式下不允许这样的写法。

正确的写法有两种,优先推荐第一种:

写法一:显式指定字段列表(强烈推荐)

这种写法最稳妥,不管后续表结构怎么变化,只要目标字段存在,语句就能正常工作:

INSERT INTO App.settings (user_id, email_frequency, layout, updated_at)
VALUES(99, NULL, 'horizontal', '2015-09-15 04:01:04');

如果之后你给email_frequency设置了明确的默认值(比如1代表每周发送一次),那再把NULL换成DEFAULT就可以正常使用了:

INSERT INTO App.settings (user_id, email_frequency, layout, updated_at)
VALUES(99, DEFAULT, 'horizontal', '2015-09-15 04:01:04');

写法二:保留原结构但替换DEFAULT为NULL

要是你暂时不想调整字段列表的写法,直接把DEFAULT换成NULL就行,因为这个字段本身允许为空:

INSERT INTO App.settings VALUES(99, NULL, 'horizontal', '2015-09-15 04:01:04');

小提醒

以后写INSERT语句尽量都显式指定字段列表,这是开发者公认的最佳实践,能避免很多莫名其妙的问题。另外可以查下你的MySQL sql_mode设置,如果是严格模式,记得别对没设显式默认值的字段用DEFAULT哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:15:42