我有一个带有自定义排序顺序列的表。
ID NAME ORDER 1 Jack 4 2 Jill 2 3 Mike 5 4 Mark 1 5 Bill 3
我想插入一个ID为6,名称为Jane且ORDER为3的新记录。我想插入该记录,以使旧记录增加,以便为新记录腾出空间,结果是这个:
ID NAME ORDER 1 Jack 5 2 Jill 2 3 Mike 6 4 Mark 1 5 Bill 4 6 Jane 3
可以使用SQL脚本吗?我一直在寻找这个答案,但不确定是否可以在我的情况下使用。另外,它需要一个额外的表来临时保存值,我想避免这种情况。
谢谢。
我忘了补充一点,第三列没有唯一约束。尽管我了解有解决此问题的方法。
您可以通过两个查询来执行此操作:
update mytable set order = order + 1 where order >= 3; insert into mytable(id, name, order) values(6, 'Jane', 3);
但是请注意,这会创建竞争条件,并且在并发压力下可能无法正常运行。
更好的解决方案是不存储客户订单,而是在查询中动态计算(您可以创建视图以使其更容易)。为此,您需要描述订购背后的逻辑。
问题来源于stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。