在指定索引处将行插入SQL表

时间:2013-12-15 16:08:32

标签: php mysql sql-insert

我希望能够在SQL表中插入一行,并为其指定一个id。问题是id是唯一的并且为了它工作我必须更新插入行之后的行,将id增加1。

所以,说我有一个像下面这样的表

enter image description here

我想插入以下行(带有现有行的ID)...

enter image description here

我希望在插入行后表格看起来像这样......

enter image description here

插入行之后的行的id需要更改,如上例所示。

我这样做的原因是允许用户按重要性排序事件(我使用jQuery来订购它们,只是不确定如何在幕后做事)

任何让我朝着正确方向前进的事情都值得赞赏,谢谢。

2 个答案:

答案 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, . . .;