ON DUPLICATE UPDATE不适用于某些行

And*_*rew 5 php mysql

我在我的查询上使用ON DUPLICATE UPDATE,一些结果没有存储它.我尝试了所有可能的方式,但那些仍然保持不变.这是数据库图片.

在此输入图像描述

那些NULL,是没有成功存储的行; 结果应为1而不是NULL.

    if($remark){
$query3 = "INSERT INTO `audit_section_remarkrecord` SET remark = '$remark', form_details_subquestion_id = '$form_details_subquestion_id', form_details_section_id = '$form_details_section_id', audit_section_no = '$audit_no' ON DUPLICATE KEY UPDATE
form_details_section_id = '$form_details_section_id' , remark = '$remark'";
$result3 = $db->query($query3); 

$query4 = "UPDATE `remarkrecord_update_details` SET form_details_section_id = '$form_details_section_id', userlog = '$user_staff', ipaddress = '$ip' WHERE form_details_subquestion_id = '$form_details_subquestion_id' AND audit_section_no = '$audit_no' ";
$result4 = $db->query($query4); 
}else{
}

}
Run Code Online (Sandbox Code Playgroud)

表结构

在此输入图像描述

Abh*_*mar 2

尝试更改要插入值到主键的列之一或向该列添加 UNIQUE 约束。

ALTER TABLE audit_section_remarkrecord ADD UNIQUE KEY (your column);
Run Code Online (Sandbox Code Playgroud)

由于当前主键上只有一个唯一键(自动增量),因此您将很难在主键上生成唯一键冲突,insert on duplicate key update (IODKU).因此,需要创建一些其他唯一键(甚至是复合键),这将触发唯一密钥的冲突并允许IODKU按预期工作。

  • 如果您使用 ALTER TABLEaudit_section_remarkrecord ADD UNIQUE(id); ,那么您的查询应该是 INSERT INTO table_name SET id="$id', ... ON DUPLICATE .. (2认同)