Php mysql删除然后更新

Php mysql删除然后更新,php,mysql,Php,Mysql,MySQL中是否有任何方法/途径,如果我删除某一行,下一行可能会被更新?为了说明我的意思,举例来说,我这里有一个表: +--------------+ | id | order | +--------------+ | 115 | 1 | | 116 | 2 | | 117 | 3 | | 118 | 1 | | 119 | 2 | | 120 | 6 | | 121 | 7 | | 122 | 8 | +---

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程序中有一些排序行。

您需要使用MySQL 5+。从MySQL 5开始,我们有触发器。触发器是在特定表上发生插入、更新或删除操作时触发或执行的程序。因此,您可以在之前创建一个“
删除
”触发器,在该触发器中,您可以在同一个表上打开一个
光标
,该表将选择在
旧.id
之后带有id的行,其中
表示已删除行数据表(称为魔术表)。然后,只需发出所需的
UPDATE
命令来更新其中的相关行

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

链接:

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

 update order1,(select @rownum:=0)dummy set order1 = 
(@rownum =@rownum+1);
所以在这种情况下,如果你删除118

Delete from YourTable where id = 118

运行上面的更新脚本,它可以工作

你看过删除触发器了吗?你解决了问题了吗?它在什么情况下需要它?可能,但我仍然需要在触发器中执行
update
,这让我很困惑。即使你用PHP编写代码,你也必须在任何情况下编写更新代码。PHP程序员不能被更新搞糊涂。您可以在这里查看一个关于SQL更新的不错的培训材料:您不能在它将给出的触发器中对同一个表执行更新error@NaveenKumar可能,有什么想法吗?如果表的大小不是那么大,请使用临时表,在触发器中更新该表@rownum:=0意味着什么?你能解释一下剧本吗?谢谢。@rownum=0将为rownum VARABLE设置初始值,然后在更新每行后将其更新为+1,您也可以使用order by id进行正确排序