1

创建和更新联系人的通用查询。更新字段时:- 执行时发生异常

INSERT INTO contact_table 
SET id = '1234',
is_stealth_mode = 1 
ON DUPLICATE KEY UPDATE 
id = LAST_INSERT_ID( id ),
is_stealth_mode = VALUES(is_stealth_mode)

一般错误:1364 字段“club_id”没有默认值

contact_table 有一个 club_id 字段,默认值为 none 且不可为空

strict mode is enabled

contact_table 已经有值 id = '1234' 和 'club_id' = 123

4

3 回答 3

1

您需要在ON DUPLICATE KEY UPDATE子句中指定每列应更新的内容

id = LAST_INSERT_ID( id ),
is_stealth_mode = VALUES(is_stealth_mode),
club_id = club_id

保持现有价值

或者

id = LAST_INSERT_ID( id ),
is_stealth_mode = VALUES(is_stealth_mode),
club_id = VALUES(club_id)

如果要更新字段值

于 2017-05-16T11:43:54.987 回答
0

这里的想法是INSERT首先执行正常,并且由于您的数据库有NOT NULL约束,它会抱怨。所以ON DUPLICATE部分并不重要(另见https://stackoverflow.com/a/17479690/1657819)。

可能的选项之一 - 为字段设置虚拟值club_id,但不UPDATE部分使用它。

但是当然,如​​果不存在这样的 id,则将创建具有虚拟数据的条目。

    INSERT INTO contact_table 
      SET id = '1234',
      is_stealth_mode = 1 ,
      club_id="dummy"  <---- Note dummy value which is not used in ON DUPLICATE part
    ON DUPLICATE KEY UPDATE 
      id = LAST_INSERT_ID( id ),
      is_stealth_mode = VALUES(is_stealth_mode)

作为替代方案,您可以更改架构以允许 NULL 值:

ALTER TABLE contact_table
    CHANGE COLUMN `club_id` `club_id` INT NULL <...>
于 2019-07-08T21:49:21.040 回答
0

“contact_table 有一个字段 club_id,其默认值为 none 且不可为空”

从您上面的陈述来看,这是否意味着 club_id 没有默认值,或者它的默认值是“NONE”。似乎 club_id 不可为空,您应该在查询中提供该值。

于 2017-05-16T11:37:14.447 回答