【问题标题】:Trigger for re-setting auto-increment of tables in phpMyadmin在 phpMyadmin 中重新设置表的自动增量的触发器
【发布时间】:2011-05-19 07:22:54
【问题描述】:

我有一个数据库,tvguide,这些是值:

id bigint 255 UNSIGNED AUTO_INCREMENT
programme varchar 255 
default value (which is from another table
with list of programs, the only linked field that
is shared with other table):<b><a href="gossipgirl.php">Gossip Girl</a></b>
channel varchar 255
airdate DATETIME - actual airtime
displayair DATETIME (rounded-up datetime, e.g. programme that airs 1.59pm 
would be shown as 2.00pm, or 6.08pm as 6.10pm)
expiration DATETIME - when program finishes
episode VARCHAR 255 NULL - has null option if episode unknown
series VARCHAR 255
epno VARCHAR 255 - episode number
setreminder VARCHAR255 (shows "set reminder", sends email to user, but that's 
another thing to work on).

我想在我的数据库中插入一个触发器,以便在删除记录时,ID 自动增量自动重新设置?

关于如何做到这一点的任何想法?到目前为止,我已经手动完成了它,但我正在研究删除记录时我可以用 phpMyadmin 做什么。

顺便说一句,我为备份目的制作了该表的副本。

谢谢

【问题讨论】:

  • 你不必重新设置自动增量,让它增长...

标签: mysql database triggers phpmyadmin record


【解决方案1】:

我同意 whitstone86 的评论,即您可以“让它成长”。

话虽如此,要随时更改AUTO_INCREMENT,您只需运行ALTER TABLE

一些伪代码...

SELECT MAX(id)+1 AS max_id_plus_one FROM my_table;

ALTER TABLE my_table AUTO_INCREMENT = $max_id_plus_one;

对于生产,竞争条件可能是一个问题。但是,如果只是你在 phpmyadmin 中闲逛,这就足够了。

【讨论】:

    【解决方案2】:

    这是一个相当危险的想法。

    让它成长,它不会发生:250000000011 使用与 250000000012 相同的位置 表,尤其是因为它是一个 bigint(8 个字节)。

    否则

    • 你怎么知道 6 个月前的 Id=25 是今天的 Id=25?
    • 如何维护完整性约束?您必须确保在更新|删除级联时到处都有外键
    • 如果您不总是删除表中的最后一条记录,则自下一个添加的记录 Id 至少为先前添加的记录的 +1 以来,增益为 0。

    【讨论】:

      猜你喜欢
      • 2019-10-24
      • 2011-03-02
      • 2020-05-09
      • 2013-05-16
      • 1970-01-01
      • 1970-01-01
      • 2011-08-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多