在 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 数据库中的列添加自动增量?
如何将我的表的自动增量 id 设置为 700,即使同一张表上存在 1000 条记录?
dbwritetable 删除 mysql 中的自动增量字段