创建和更新联系人的常见查询。 在对字段进行更新时: - 执行
时发生异常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
答案 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 <...>