如何基于非唯一列实现数据库行的插入或更新(单SQL查询)
实现基于非主键/唯一键的插入或更新操作
要实现你要的「不存在则插入,存在则更新指定字段」的逻辑,确实得用ON DUPLICATE KEY UPDATE,但这个语法的触发前提是插入时产生唯一键或主键冲突。所以你得先给match列加唯一索引,之后才能用单条SQL完成需求。
第一步:给match列添加唯一索引
执行这条SQL给目标表的match列创建唯一约束(替换成你的实际表名):
ALTER TABLE `your_table_name` ADD UNIQUE INDEX idx_match (`match`);
注:如果
match列允许空值,唯一索引会允许多个NULL值存在。如果业务上match不能为NULL,建议同时给列加上NOT NULL约束。
第二步:修改插入语句,添加更新逻辑
把原INSERT语句加上ON DUPLICATE KEY UPDATE片段,指定当match值重复时更新to字段:
INSERT INTO `your_table_name` (`match`, `to`, `status`, `type`, `cat`, `rel`, `tag`) VALUES ('$match_tag', '$match_tag_url', '1', 'redirection', 'confirmed', '', '$tag') ON DUPLICATE KEY UPDATE `to` = '$match_tag_url';
这样执行时,如果match列的值已存在,就会自动更新to字段为新值;不存在则插入新行。
内容的提问来源于stack exchange,提问作者Panos
相关产品推荐
相关产品推荐

