MySQL默认值错误,ON DUPLICATE KEY UPDATE,sql模式为ON

时间:2017-05-16 11:15:39

标签: mysql insert-update sql-mode

创建和更新联系人的常见查询。 在对字段进行更新时: - 执行

时发生异常
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 Field' club_id'没有默认值

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

strict mode is enabled

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

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

您需要在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)

如果您想更新字段值

答案 2 :(得分: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 <...>