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

关于mysql的一个问题

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

我有一张表如下

img

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

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

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

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

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

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

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

hmppplb 1 年前 湖北省 #3 赞 0

删之前查一下

emile_yang 1 年前 湖北省 #4 赞 0

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

duanlang2015 1 年前 广东省 #5 赞 0

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

weiliu1463 1 年前 新加坡 #6 赞 2

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

EXvision 1 年前 湖北省 #7 赞 0

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

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

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

JunkJoe 1 年前 上海市 #8 赞 0

物理删除,insert or update

zhongsfiu 1 年前 湖北省 #9 赞 4

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

irving2016 1 年前 湖北省 #10 赞 1

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

XiaoXiaMI 1 年前 湖北省 #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 1 年前 湖北省 #12 赞 0

@zhongsfiu 这个办法更好,666

Aaronkh 1 年前 湖北省 #13 赞 0

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

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

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

ybonfire 1 年前 湖北省 #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 1 年前 湖北省 #16 赞 0

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

ybonfire 1 年前 湖北省 #17 赞 0

@EXvision chatgpt教的

binyu 1 年前 湖北省 #18 赞 0

这就是软删除啊

请绑定手机号后,再发言,点击此处
Guozaoke.com—源自武汉的高端交流分享社区
相关主题
最近时间少了, 隔了这么久, 才做了一个网站
想配一个台式机,求推荐
做了一款摸鱼软件,有人要试用吗?
有搞嵌入式硬件的吗?
搞了个AI 生图的网站,不需要登录,永久免费
社友们,你们是怎么入编程这行的?
计算机相关5000本电子书PDF分享
求推荐一个AI智能体客服
关于团队开发习惯
cursor这么强大,web前端是不是要淘汰了

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