gpt4 book ai didi

php - 重新排列主键

转载 作者:行者123 更新时间:2023-11-29 08:46:09 25 4
gpt4 key购买 nike

我有一个 PHP 页面,它与这个结构简单的小型 MySQL 数据库表进行交互。 ID名称地址是字段。 ID 是主键。

+------+------------+-------------+
| ID | Name | Country |
|______|____________|_____________|
| E001 | Stephen | America |
| E002 | John | Britain |
| E003 | Kate | Canada |
| E004 | Carlos | Spain |
| E005 | James | Australia |
|______|____________|_____________|

如果我删除 E003 处的记录,它看起来像这样。

+------+------------+-------------+
| ID | Name | Country |
|______|____________|_____________|
| E001 | Stephen | America |
| E002 | John | Britain |
| E004 | Carlos | Spain |
| E005 | James | Australia |
|______|____________|_____________|

E002E004 之间出现间隙。

有办法填补这个空白吗?像这样

+------+------------+-------------+
| ID | Name | Country |
|______|____________|_____________|
| E001 | Stephen | America |
| E002 | John | Britain |
| E003 | Carlos | Spain |
| E004 | James | Australia |
|______|____________|_____________|

之前的记录有E004,落入E003的位置。以前的E005获得编号E004,依此类推。就像记录一样退后一步

有没有办法以编程方式执行此操作?

最佳答案

您需要对它们重新编号有什么原因吗?关键值应该并不重要。如果确实如此(即,它们用于外部目的),请考虑让外部键成为表中的常规列,并让主键成为自动递增整数字段。即使您这样做,您仍然可能不应该对键重新编号。这意味着所有外部依赖项也需要更新。这样做没有多大值(value)。

但是,如果你必须......

如果键是自动递增的(它应该是),你可以这样做:

ALTER TABLE MyTable DROP ID;
ALTER TABLE MyTable ADD COLUMN ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT FIRST;

如果不是,那么您可以做几件事,但最简单的可能是使用变量充当计数器。为了使这更容易,请不要使用字符串主键,而是使用纯数字主键。

SET @id = 0;

UPDATE MyTable
SET ID = (@id := @id + 1)
ORDER BY ID;

关于php - 重新排列主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12470197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com