【问题标题】:Keeping MySQL values in sequence after deletion删除后保持MySQL值的顺序
【发布时间】:2013-03-30 22:55:27
【问题描述】:

假设我在 MySQL 数据库中有一个名为“Test”的表(其中 id 是主键):

id | entry |
---+-------+
 1 |  a    | 
 2 |  b    | 
 3 |  c    | 
 4 |  c    | 
 5 |  d    | 
 6 |  e    | 

我想知道的是,在从表中删除一行后,如何将 id 值保留在序列 {1, 2, 3, ..., n-1, n} 中。例如,假设我执行以下操作:

 DELETE FROM Test WHERE id = 4;

那么我希望表格在删除后看起来像这样:

 id | entry |
 ---+-------+
  1 |  a    | 
  2 |  b    | 
  3 |  c    | 
  4 |  d    | 
  5 |  e    |

我认为解决方案是使用数据库触发器,但我不太确定如何创建实现此行为的触发器。

【问题讨论】:

  • 这样做的目的是什么?
  • 嗯,我正计划为在线图片库创建一个数据库,其中每个图片都将通过表中的唯一 id 值来标识。这样我就可以创建一个干净的 URL,例如 mywebsite/art/image_index,其中 image_index 是表的 id。如果要从图库中删除某些图像,那么我认为将图像 x.jpg 由 1 的 id 表示并且它的后继图像 y.jpg 由 5 的 id 表示(例如)这样是不整洁的会乱序(而且不直观?)。

标签: mysql triggers sequence


【解决方案1】:

你可以运行这个查询:

SET @id = 0;
UPDATE `Test` SET `id` = @id:= @id + 1;

虽然我不知道你为什么要...

【讨论】:

    猜你喜欢
    • 2022-08-16
    • 2022-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-17
    相关资源
    最近更新 更多