关于 duplicate key update 的解释?

insert into `likes`(user_id, liker_id, relation_ship) values(1, 2, 3) on duplicate key update relation_ship=relation_ship | 1;

这一句 SQL 语句如何理解?我只知道是如果新增的数据在likes 表中主键索引和唯一索引不冲突则新增,反之则更新,但是update 后边的内容就不太能理解了,求解答

表结构如下:

CREATE TABLE `likes` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `liker_id` int(11) NOT NULL,
  `relation_ship` tinyint(1) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_user_id_liker_id` (`user_id`,`liker_id`)
) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8mb4;

阅读 3.5k
2 个回答

当主键或唯一索引冲突时,将relation_ship字段更新为relation_ship原先值与1按位或 运算结果

假设原先的值是2,则会更新成3

2|1=3

这个SQL能运行吗?是不是写错了啊

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题