我有一张包含两列的表格。我在此示例中删除了一些其他列。实际上还有5个列。
它的填充方式如下:
msgnum dir
0 /var/spool/asterisk/voicemail/test/1/INBOX
1 /var/spool/asterisk/voicemail/test/1/INBOX
2 /var/spool/asterisk/voicemail/test/1/INBOX
3 /var/spool/asterisk/voicemail/test/1/INBOX
4 /var/spool/asterisk/voicemail/test/1/INBOX
5 /var/spool/asterisk/voicemail/test/1/INBOX
0 /var/spool/asterisk/voicemail/test/1/Old
1 /var/spool/asterisk/voicemail/test/1/Old
0 /var/spool/asterisk/voicemail/test/2/INBOX
1 /var/spool/asterisk/voicemail/test/2/INBOX
请注意,msgnum不是唯一的。它对每个人来说都是独一无二的。值。
删除记录后,我想重新计算并更新每行的msgnum字段,保留msgnum的顺序。因此,如果删除了msgnum = 3的记录,则会更新msgnum 4和5以“将它们向上移动”。
是否可以在纯MySQL中执行此操作?
由于
答案 0 :(得分:0)
您可以使用triggers来实现这一目标。 在您的表格中,转到更多 - >触发并选择何时应该触发它,在这种情况下:AFTER-DELETE,然后编写SQL。实施例
UPDATE table SET msgnum = msgnum-1 WHERE msgnum > OLD.msgnum
其中OLD.msgnum
将是已删除的msgnum。
抱歉我的英文不好
答案 1 :(得分:0)
由于您已经通过PHP执行sql,我将基于此回答。
您需要在数据库事务中按顺序执行以下2 sqls:
delete from mytable where msgnum = 3;
update mytable set msgnum = msgnum - 1 where msgnum > 3;
您需要在事务中执行此操作,以便在更新失败时,您也可以安全地回滚删除。
答案 2 :(得分:0)
我设法找到了我的解决方案,因此可以认为这是重复的。