MySQL执行带关联的插入语句报1364字段无默认值问题求解
报错原因
- 语法使用场景错误:你的需求是更新Table1已存在记录的字段值,但你使用了
INSERT语句,INSERT的作用是插入全新的行数据,而非修改已有行的字段内容。 - 字段映射完全颠倒:你写的语句尝试向Table1插入
Calculated_size字段,但Table1本身没有这个字段;同时SELECT子句从Table2取Size字段,Table2也不存在该字段,字段和表的对应关系完全写反。 - 主键约束直接触发报错:Table1的ID是主键,自带非空、唯一约束且无默认值,你执行
INSERT时未给ID字段传值,因此直接触发1364报错,该报错属于主键约束的强制校验,和SQL模式的STRICT_TRANS_TABLES参数无关,关闭该参数自然不会生效。
解决方案
MySQL 5.7原生支持多表关联更新语法,直接使用UPDATE配合内连接即可实现需求,正确语句如下:
UPDATE Table1 INNER JOIN Table2 ON Table1.ID = Table2.ID SET Table1.Size = Table2.Calculated_size;
执行效果说明
- 内连接只会匹配两张表同时存在的ID记录,也就是ID=2的行,只会更新该行的Size字段为Table2对应的
Calculated_size值S - ID=1的行因为没有在Table2中匹配到对应ID,不会被更新,Size字段保持为空,完全符合你的预期结果。
内容的提问来源于stack exchange,提问作者Fernanda Andretto
相关产品推荐
相关产品推荐

