mysql删除然后更新

时间:2012-05-24 03:53:13

标签: php mysql

MySQL中是否有任何方法/方法,如果我删除某一行,下一行可能会更新?为了说明我的意思,比如我在这里有一张表:

+--------------+
|  id  | order |
+--------------+
|  115 |     1 |
|  116 |     2 |
|  117 |     3 |
|  118 |     1 |
|  119 |     2 |
|  120 |     6 |
|  121 |     7 |
|  122 |     8 |
+--------------+

我即将放弃id = 117,如果操作成功,我希望id = 118将其订单从1开始为3,这是当前删除id = 117的顺序。然后让id = 119订购4,然后id = 120改为5,依此类推。

我这样做是因为我的PHP程序中有一些排序行。

2 个答案:

答案 0 :(得分:1)

在您的情况下,您将必须完全重新填充订单列,因为如果您删除行ID 118或119,则需要更改118,119,120,依此类推到表的末尾

 update order1,(select @rownum:=0)dummy set order1 = 
(@rownum =@rownum+1);

所以在这种情况下如果删除118

Delete from YourTable where id = 118

运行上面的更新脚本,它可以正常运行

答案 1 :(得分:0)

你需要拥有MySQL 5+。从MySQL 5开始,我们有触发器。触发器是在特定表上发生插入,更新或删除操作时触发或执行的程序。因此,您可以创建一个“BEFORE”“DELETE”触发器,您可以在同一个表上打开cursor,在OLD.id所在的{OLD之后选择带有ID的行1}}表示已删除的行数据表(称为魔术表)。然后,只需发出所需的UPDATE命令即可​​更新其中的相关行。

您可以将已删除的行数据称为OLD.col_name。在INSERTUPDATE触发器中,您还可以访问NEW.col_name以引用插入的数据。只有在UPDATE触发器中,您才能访问NEWOLD魔术表。

链接: MySQL triggers Cursors