在 phpMyadmin 中重新设置表的自动增量的触发器

Posted

技术标签:

【中文标题】在 phpMyadmin 中重新设置表的自动增量的触发器【英文标题】:Trigger for re-setting auto-increment of tables in 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 做什么。

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

谢谢

【问题讨论】:

你不必重新设置自动增量,让它增长... 【参考方案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。

【讨论】:

以上是关于在 phpMyadmin 中重新设置表的自动增量的触发器的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 phpmyadmin 向 mysql 数据库中的列添加自动增量?

以 phpmyadmin 中的字符开头的自动增量

如何将我的表的自动增量 id 设置为 700,即使同一张表上存在 1000 条记录?

dbwritetable 删除 mysql 中的自动增量字段

如何获取将在 PHPMyAdmin 中重新创建 sql 表的查询

如果一个表是自动增量的,你怎么能从一个 sqlite 表的元数据中得到?