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
。现在可以了,谢谢。