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