具有增量值的MySQL更新行

时间:2017-01-30 19:22:36

标签: mysql

我有一张包含两列的表格。我在此示例中删除了一些其他列。实际上还有5个列。

  • DIR
  • MSGNUM

它的填充方式如下:

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中执行此操作?

由于

3 个答案:

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

您需要在事务中执行此操作,以便在更新失败时,您也可以安全地回滚删除。

Example for transaction from the PHP docs

答案 2 :(得分:0)

我设法找到了我的解决方案,因此可以认为这是重复的。

mysql update a column with an int based on order