做了个分析名字含义的小网站,希望各位给点建议 |
我有一张表如下
如何实现,删除了id为S001的记录,下次user_id为1的用户再插入一条数据时,sort_id依然为1,而不是3、4之类的
@Sunrise_Sunset 问题就出现在这里,如何去判断sort_id的缺少项,要全部取出来遍历?
加个是否逻辑删除的字段如is_delete,给个默认值为0。一旦删除,update为1.下次插入的时候,求一下min(sort_id) where is_delete = 1,插入成功,则将这个逻辑删除的记录给物理删除掉
@zhongsfiu 这个办法更好,666
删除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的新记录。
过早客微信公众号:guozaoke • 过早客新浪微博:@过早客 • 广告投放合作微信:fullygroup50 鄂ICP备2021016276号-2 • 鄂公网安备42018502001446号