最小化MySQL InnoDB主键的脚本

最小化MySQL InnoDB主键的脚本,mysql,innodb,Mysql,Innodb,我不知道用谷歌搜索什么才能找到我想要的——我有一个从许多其他网站导入的大型数据库,它的主键有巨大的缺口 数据库是InnoDB,所有外键都设置正确(好吧……无论如何,我希望如此) 是否有人知道一个脚本会获取主键并将其最小化,从而填补所有空白并更新FK条目 (例如,PK 44、77、88变为1、2、3) 谢谢 我最终选择了类似的东西——乔纳斯T “插入一个新的自动增量列并将其设置为主键。将一个新的外键列插入子表,并用它们的旧键值更新新的主键。” 在“删除”和“更新”时的外键定义中。 如果将ON UP

我不知道用谷歌搜索什么才能找到我想要的——我有一个从许多其他网站导入的大型数据库,它的主键有巨大的缺口

数据库是InnoDB,所有外键都设置正确(好吧……无论如何,我希望如此)

是否有人知道一个脚本会获取主键并将其最小化,从而填补所有空白并更新FK条目

(例如,PK 44、77、88变为1、2、3)


谢谢

我最终选择了类似的东西——乔纳斯T “插入一个新的自动增量列并将其设置为主键。将一个新的外键列插入子表,并用它们的旧键值更新新的主键。”

在“删除”和“更新”时的外键定义中。 如果将ON UPDATE设置为CASCADE(“ON UPDATE CASCADE”),则主键上的更新将“级联”到外键上的更新

我的键都是UNSIGNED int(11),您必须使用您的键,我使用了x,因此只需更改表名即可在每个表上运行

简历是一张工作表,组织是我“最小化”的表

DROP TABLE cv;
CREATE TABLE cv (
  id int(11) UNSIGNED NOT NULL AUTO_INCREMENT, 
  cv int(11) UNSIGNED NOT NULL, 
  PRIMARY KEY(id)
);

INSERT INTO cv (cv)
  SELECT id FROM Organisation ORDER BY id;

UPDATE Organisation x
  LEFT JOIN cv ON cv.cv = x.id
  SET x.id = cv.id;

“在主键上有巨大的缺口”——那又怎样?真正的问题是什么?插入一个新的自动增量列并将其设置为主键。在子表中插入一个新的外键列,并用它们的旧键值更新新的主键。@zerkms-当数据中只有200条记录时,我有一些ID为100000或更多的表。没错,这不是个大问题,但很烦人。@Daemol:“没错,这不是个大问题,但很烦人”——这根本不是问题。既不小也不大。永远不要依赖PK值。所以,即使它是9999999-只要使用它,不要使用它care@JonasT-我称之为“计划B”-我希望这个过程在过去已经被某人自动化了-有很多表,我知道理论上脚本可以在没有我太多输入的情况下处理这些关系。