过早客
  • 首页
  • 节点
  • 成员
  • 广告投放
  • 登录
  • 注册

关于mysql的一个问题

IT技术 • monyuan • 发表于 2 年前 • 最后回复来自 binyu • 2 年前

我有一张表如下

img

如何实现,删除了id为S001的记录,下次user_id为1的用户再插入一条数据时,sort_id依然为1,而不是3、4之类的

加入收藏 新浪微博 分享到微信 ❤赞 3182 次点击 0 人赞 0 人收藏

打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮

共收到18条回复
Sunrise_Sunset 2 年前 湖北省 #1 赞 0

这个下次插入时,提前判断下user_id为1时,sort_id的缺少项,然后不就可以了吗?

monyuan 楼主 2 年前 湖北省 #2 赞 0

@Sunrise_Sunset 问题就出现在这里,如何去判断sort_id的缺少项,要全部取出来遍历?

hmppplb 2 年前 湖北省 #3 赞 0

删之前查一下

emile_yang 2 年前 湖北省 #4 赞 0

单SQL暂时没想到。 提供一个思路:用存储过程,定义变量,排序再结合判断,定位出sort_id值 之后做插入

duanlang2015 2 年前 广东省 #5 赞 0

insert xxxxx duplicate xxx ? 如果key存在就update,不存在就插入,多年未写sql了,不知道行不

weiliu1463 2 年前 新加坡 #6 赞 2

换个思路 在redis存下sortid 插入前查下redis 有则带上

EXvision 2 年前 湖北省 #7 赞 0

一个用户这样的数据有多少?如果不超过200条,就直接全部查出来然后遍历后处理。

换一个思路就是,删除时,将这条记录对应的userId和sortId,放到一个预分配表,下次先从预分配表拉取。

最后,要注意一下锁的问题了,避免并发时出现重复的sortId

JunkJoe 2 年前 上海市 #8 赞 0

物理删除,insert or update

zhongsfiu 2 年前 湖北省 #9 赞 4

逻辑删除,下次插入数据的时候判断插入的id是否存在,存在则更新删除标志,

irving2016 2 年前 湖北省 #10 赞 1

加个是否逻辑删除的字段如is_delete,给个默认值为0。一旦删除,update为1.下次插入的时候,求一下min(sort_id) where is_delete = 1,插入成功,则将这个逻辑删除的记录给物理删除掉

XiaoXiaMI 2 年前 湖北省 #11 赞 0

同意楼上的做法,逻辑删除,加一个deleted列,0代表未删除,1代表已删除
删除了id为S001的记录,那么该条记录的deleted=1
下次user_id为1的用户再插入一条数据时,查询一下已经删除的数据记录:
SELECT sort_id FROM tableName WHERE user_id='1' AND delete=1

EXvision 2 年前 湖北省 #12 赞 0

@zhongsfiu 这个办法更好,666

Aaronkh 2 年前 湖北省 #13 赞 0

一个软删除的是至于前面这么多歪招吗

da_xia 2 年前 内蒙古自治区 #14 赞 0

我觉的你可以让id和sort_id产生一个关系。然后用程序来实现。

ybonfire 2 年前 湖北省 #15 赞 0

删除id为s001的记录
DELETE FROM my_table WHERE id = 's001';

更新user_id为1且sort_id大于等于1的所有记录的sort_id值
UPDATE my_table SET sort_id = sort_id - 1 WHERE user_id = 1 AND sort_id >= 1;

插入新的记录,设置其user_id为1、sort_id为当前user_id对应的最大sort_id值加1
INSERT INTO my_table (id, user_id, sort_id)
SELECT 's007', 1, COALESCE(MAX(sort_id), 0) + 1 FROM my_table WHERE user_id = 1;
这里我们使用了子查询来获取当前user_id对应的最大sort_id值,并将其加1作为新记录的sort_id值插入到my_table表中。使用COALESCE函数可以保证即使当前user_id没有任何记录,也能正确地插入sort_id为1的新记录。

EXvision 2 年前 湖北省 #16 赞 0

@ybonfire 这个性能太差了,不行的

ybonfire 2 年前 湖北省 #17 赞 0

@EXvision chatgpt教的

binyu 2 年前 湖北省 #18 赞 0

这就是软删除啊

请绑定手机号后,再发言,点击此处
Guozaoke.com—源自武汉的高端交流分享社区
相关主题
iOS 过早客没有数据,大佬们求教!
GPT-5
寻有K12教育行业软件开发经验的同学合作
你们都用哪些AI工具,求分享下~
过早客flutter版来了
亲测,鸿蒙开发奖励到手了
感觉gemini已经是一骑绝尘
分享一个拥有很多好看壁纸的插件
作为后端开发工程师,你们有中途转向机器学习/深度学习的吗?
写了个过早客的暗色插件,个人感觉很好用嘿嘿

过早客微信公众号:guozaoke • 过早客新浪微博:@过早客 • 广告投放合作微信:fullygroup50 鄂ICP备2021016276号-2 • 鄂公网安备42018502001446号