我希望能够在SQL表中插入一行,并为其指定一个id。问题是id是唯一的并且为了它工作我必须更新插入行之后的行,将id增加1。
所以,说我有一个像下面这样的表
我想插入以下行(带有现有行的ID)...
我希望在插入行后表格看起来像这样......
插入行之后的行的id需要更改,如上例所示。
我这样做的原因是允许用户按重要性排序事件(我使用jQuery来订购它们,只是不确定如何在幕后做事)
任何让我朝着正确方向前进的事情都值得赞赏,谢谢。
答案 0 :(得分:0)
首先,最佳做法是永远不会修改插入行的主键(我假设id
是您的主键?)。 Just Don #tt It It™。
相反,创建一个额外的列(称为importance
/ priority
/ something,并根据需要修改该字段。
那就是说,查询看起来像是:
START TRANSACTION;
# increment every importance value that needs incrementing to make way for the new row:
UPDATE mytable SET importance = importance + 1 WHERE importance >= newimportance;
# insert the new row:
INSERT INTO mytable (title, text, importance) VALUES ('newtitle', 'newtext', newimportance);
COMMIT;
答案 1 :(得分:0)
您的设计出了问题。 id
列通常具有表示每行的唯一值。关于id
s的好处是值不更改,这意味着它们可以被其他表甚至应用程序引用。
听起来你想要某种“排序顺序”或类似的东西。我建议您为此目的使用另一列。或者,至少重命名id
列,以便在查看模式时不会混淆知道数据库的人。名为id
(或tableID
或类似内容)的内容通常应为自动递增的主键。
在任何情况下,您都可以通过首先进行更新来完成您想要的任务:
update t
set newcol = newcol + 1
where newcol >= NEWVALUE;
insert into t(newcol, . . .)
select NEWVALUE, . . .;