gpt4 book ai didi

mysql - 表中的订单 ID

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

是否可以让 phpMyAdmin 重新排列表的 ID?就像当我得到 1, 2, 3, 5, 6, ... PMA 使其变成1, 2, 3, 4, 5, 6, ..

谢谢

最佳答案

我能想到的对数据重新编号的最佳方法是使用 auto_increment。假设您想要对表 t 进行重新排序,其中包含无序/有漏洞的 ID 列 id

CREATE TABLE `t` ( id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, ... );

第一步是创建一个新的编号,并将每个现有 ID 关联到一个从 1 开始计数的新 ID。

-- this could be a temporary table
CREATE TABLE `new_t_ids` (
new_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
current_id INT UNSIGNED NOT NULL
);
INSERT INTO new_t_ids (current_id) SELECT id FROM t ORDER BY id ASC;

现在我们可以更新t:

UPDATE t  JOIN new_t_ids ON t.id = new_t_ids.current_id  SET t.id = new_id;

最后我们设置了auto_increment。这最终变得非常棘手,因为 ALTER 无法直接设置为 vairable,但无论如何,这是一个在 stackoverlow 中展示的好模式(仅供引用,I had to look it up)

SET @next_id  = ( SELECT MAX(ID) + 1 from t );
set @s = CONCAT("alter table t auto_increment = ", @next_id);
prepare stmt from @s;
execute stmt;
deallocate prepare stmt;

现在你的ID都从1开始重新编号了。

我们可以保留 new_t_ids 表以供引用,或者

DROP TABLE new_t_ids;

话虽如此,这是一个坏主意。数字之间不必没有间隙。我最担心的是,如果有任何与此数据相关的内容并且您的外键没有正确定义,您最终将破坏所有这些关联。

此外,如果您在线对表执行此操作,您将需要锁定它,以便内容在您工作时不会更改。最好让数据库停止服务。

因此,我的建议是尝试放弃对数据在计算机中的外观的相当人性的看法:) 一般来说,漏洞比损坏的关系数据要好得多。

关于mysql - 表中的订单 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22585927/

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