Mysql 插入记录和其他记录的增量值
我有一个带有自定义排序顺序列的表Mysql 插入记录和其他记录的增量值,mysql,sql,sql-insert,Mysql,Sql,Sql Insert,我有一个带有自定义排序顺序列的表 ID NAME ORDER 1 Jack 4 2 Jill 2 3 Mike 5 4 Mark 1 5 Bill 3 我想插入一条ID为6、姓名为Jane、订单号为3的新记录。我想插入它,以便增加旧记录以为新记录腾出空间,结果如下: ID NAME ORDER 1 Jack 5 2 Jill 2 3 Mike 6 4
ID NAME ORDER
1 Jack 4
2 Jill 2
3 Mike 5
4 Mark 1
5 Bill 3
我想插入一条ID为6、姓名为Jane、订单号为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);
但是,请注意,这会创建竞争条件,并且在并发压力下可能无法正常工作
更好的解决方案不是存储客户订单,而是在查询中动态计算(您可以创建一个视图使其更容易)。为此,您需要描述排序背后的逻辑。试试这个
INSERT INTO mytable(id, name, order) values (6, 'Jane', 0);
UPDATE mytable SET order = CASE WHEN id % 2 <> 0 THEN order + 1 ELSE order / 2;
在mytable中插入(id、名称、顺序)值(6,'Jane',0);
UPDATE mytable SET order=当id为%2时为0,然后为order+1,否则为order/2;
是的,我通常会使用脚本来计算MySQL内部或外部的排序。但这种情况下的排序大多是任意的,没有模式。当我运行脚本时,我得到错误1062,并抱怨重复值。我尝试过使用SET unique\u checks=0禁用唯一检查代码>但没有成功。不确定还可以尝试什么。是否有办法将顺序设置为相反的顺序?也就是说,先是较大的数字,然后是较小的数字?我只需要在update语句的末尾加上ORDER BY ORDER DESC
。现在可以了,谢谢。