【问题标题】:auto update of database "id" field自动更新数据库“id”字段
【发布时间】:2015-01-07 18:22:37
【问题描述】:

我有带有 id 和 news 字段的列。 “id”字段在数据库中显示为主键。

我希望“id”字段仅作为主要字段,即我希望它增加 1。另外,当我从该表中删除任何记录时,它应该从已删除的数字开始计数。

例如:- 如果我有 20 条记录。我将记录从 10 删除到 15。因为我删除了 5 条记录,现在总数为 15 条记录。现在我希望数据库再次从 16 开始。但它占据了下一个数字,即记录号 21。

任何帮助将不胜感激。谢谢。

【问题讨论】:

  • 这就是mysql中自动递增的工作原理
  • 不要乱用自动增量键。只需使用日期时间列来指示顺序
  • 我实现了自动增量,但它从 21 开始值。但我希望它从 15 开始。它不会根据记录更新进行更新.. 再加上告诉我如何避免空值.. 我应该使用修剪功能还是它们的任何其他功能来避免空值。以及如何将 NULL 应用于任何字段。我选择了该字段前面的 null 选项,但它不起作用。
  • 请告诉我如何使用日期时间列进行订购。
  • @user3877861 你有序列号的目的是什么?你想订购唱片吗?还是您只是想对记录进行排序?

标签: mysql database


【解决方案1】:

如果您想在行中添加行数,只需将其添加到您的选择中,不要与自增主键混淆。

SET @pos=1;
SELECT @pos:=@pos+1 AS rowPosition, yourtable.*
  FROM yourtable
  ORDER BY yourtable.id ;

此代码将打印您的表格,其中包含额外的行 rowPosition,您的行编号为 1,2,3,...

【讨论】:

    【解决方案2】:

    不确定您究竟想对序列号做什么,但这是可能的。 但是,修改自动编号的列没有意义,也不建议这样做。相反,您必须插入另一列,例如 sequence_id as int

    那么你必须在表中添加一个触发器,比如 当新记录插入/删除 > 启动序列。

    序列函数将是一个“检查和更新函数”,它检查 sequence_id 是否与行的当前索引位置相同。如果不更新。

    函数看起来类似于:

    set @mIndex :=0;
    Update tbl_user
        SET squence_id = (@mIndex := @mIndex + 1)
    WHERE ((user_id > 0) and ((tbl_user.squence_id <> @mIndex) or (tbl_user.squence_id is null)));
    

    仅当索引位置不同时,此函数才会将序列号从 0 重写为您的总记录数。 例如:如果您有序列 id 1 2 3 8 9 6 它将更新两行,结果将类似于 1 2 3 4 5 6

    请注意,这可能会大大降低您的数据库性能。是否要使用它完全取决于您。这只是证明 MySQL 能够执行此类操作。

    祝你好运。

    【讨论】:

      猜你喜欢
      • 2010-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-16
      • 1970-01-01
      • 2022-11-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多