我有两组数据需要合并在一起。那是容易的部分。问题是这些数据集的 ID 相同。我想遍历其中一张表,只需将所有 ID 增加 10,000,这样当我合并这两个表时,就没有相同的 ID。
有没有办法遍历每一行并将 ID 增加 10,000 或任何数字?
我有两组数据需要合并在一起。那是容易的部分。问题是这些数据集的 ID 相同。我想遍历其中一张表,只需将所有 ID 增加 10,000,这样当我合并这两个表时,就没有相同的 ID。
有没有办法遍历每一行并将 ID 增加 10,000 或任何数字?
UPDATE YourTable
SET ID = ID + 10000
您也可以在合并表的过程中执行此操作:
INSERT INTO Table1 (ID, other columns...)
SELECT ID+10000, other columns...
FROM Table2
虽然一些数据库专家将更改 ID 视为绝对禁忌,但实际上并不难 - 但有一些警告。
首先,如果您有与您的 ID 相关的外键,请将它们设置为自动更新:
ALTER TABLE `referring_table` DROP FOREIGN KEY `fk1`;
ALTER TABLE `referring_table` ADD CONSTRAINT `fk1` FOREIGN KEY (`main_id`) REFERENCES `main` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
中的任何更改main.id
都将传递给referring_table.main_id
.
然后,更改 ID 值:
UPDATE `main` SET `id` = `id` + 1000;
最后,更改 ID 可能会造成混淆AUTO_INCREMENT
(至少在 InnoDB 中,对于 MyISAM 不确定)。在插入新数据时,您可能需要重置AUTO_INCREMENT
以避免讨厌的 ID 冲突:
SELECT `id` FROM `main` ORDER BY `id` DESC LIMIT 1;
ALTER TABLE `main` AUTO_INCREMENT = 1100; -- the value returned from last select + 1