将 Table 主键 ID 更改为按创建日期顺序排列

Altering Table Primary Key ID to be in order of Date Created

我会尽力概述我的问题和问题。

问题:

我从 MySQL 数据库导出了我的文章,但没有保留原始主键 ID。我把它转移到另一个数据库,它变得混乱了。问题是,根据 table_contents 中的主键 ID,创建日期列的顺序不正确。一些其他信息。 PK是自动递增的。见下图:

Table sorted by ID

如您所见,创建日期根本不是按时间顺序排列的。现在,当我按创建日期对 table 进行排序时:

Table sorted by Created Date

ID也不对。

可能的解决方案:

我可以手动重新编辑 table 中的每个项目,但这会花费很长时间。

我的想法:

我是 SQL 的初学者,但是我可以编写什么样的 SQL 查询来完成我想做的事情?我在想我必须创建 table_contents 的副本,将原始文件和副本合并在一起,然后按创建日期的顺序更改 ID。老实说,我不确定如何编写查询。

我的问题:

我将如何编写查询以将主键 ID 列更改为按内容创建日期列按时间顺序升序排列?

关闭:

如果我不清楚或者这不可能,请告诉我。谢谢!

编辑:根据目前的反馈,我尝试编写一个查询:

ALTER TABLE skwx_content;
SELECT @row_num := @row_num + 1 as newid, skwx_content.id from skwx_content    , (select @row_num := 0) x order by skwx_content.created asc
ALTER TABLE skwx_content DROP PRIMARY KEY;
ADD COLUMN newid INT(10) NOT NULL AUTO_INCREMENT FIRST ORDER BY   skwx_content.created ASC,
ADD PRIMARY KEY (newid);
ALTER TABLE skwx_content CHANGE newid id INT(10);

我试过后出现错误:puu.sh/ohBAC/c3a8b12340.png

使用 updateorder by 以及 user variable 即可。

set @max_id = (select max(id) from mytable);
set @id = @max_id;
update mytable set id = (@id := @id + 1) order by created;
update mytable set id = id - @max_id;

执行上述SQL后,id将从1开始

虽然主键不需要与任何其他列按顺序排列,因为您可以查询数据并按您想要的任何方式对其进行排序,但如果您想这样做,您仍然可以使用此查询来获取一行基于创建日期的数字列

select @row_num := @row_num + 1 as RowNumber, t.[PrimaryKeyColumn] from [tablename] t, (select @row_num := 0) x order by t.CreatedDate asc

您可以根据主键将此查询与 table 连接起来,将 RowNumber 列的值插入 table 中新创建的列,然后您可以将此新列设为主键并删除旧的主键列。