gpt4 book ai didi

php - MySQL修复两个表中的自动增量差距

转载 作者:可可西里 更新时间:2023-11-01 07:05:31 25 4
gpt4 key购买 nike

我有两个这样的表;

id_image   foo    bar
1 3 5
2 8 1
3 17 88
7 14 23
8 12 9


id_image bar foo
1 2 3
1 5 6
2 18 11
2 10 12
3 8 21
3 17 81
7 29 50
7 1 14
8 10 26
8 27 34

第一个表中自动递增的 id_image 有一个间隙。在第二个表中,id_image 引用了第一个表中的id_image,每个ID 都有两个。

注意:此表是理论上的。我不知道差距到底在哪里,或者是否有多个差距。我所知道的是第一个值为 1,最后一个值高于总行数。

现在,我想弥补这个差距。

在您说差距无关紧要之前,如果确实如此,那就是糟糕的数据库设计,让我告诉您; 我同意你的看法。

但是,我正在处理的是一个(无可救药的后端向后)第三方开源系统,我需要将大量没有交叉引用 ID 的现有数据导入到多个表中。我可以确保相同数据在整个系统的每个表中都获得匹配 ID 的唯一方法是按顺序输入它,这意味着我不能有间隙。

那么我现在需要做的是;

  1. 修复第一个表中 id_image 列的空白,使最后一个值与行数匹配。
  2. 编辑第二个表中的 id_image 列,使其对应于同一行的值与间隙修复之前对应。

我将如何开始做这件事?我知道这可能超出了 MySQL 查询语言的能力,因此 PHP 答案也是可以接受的。谢谢! :)

最佳答案

ALTER TABLE table2
ADD FOREIGN KEY FK_IMAGE (id_image)
REFERENCES table1 (id_image)
ON DELETE CASCADE
ON UPDATE CASCADE;

SET @currentRow = 0;

UPDATE table1 INNER JOIN (
SELECT @currentRow := @currentRow + 1 AS id_image_new, id_image AS id_image_old
FROM table1
ORDER BY id_image ASC) t on t.id_image_old = table1.id_image
SET table1.id_image = t.id_image_new;

ALTER TABLE table1 AUTO_INCREMENT = 1;

FK 将相应地自动更新您的第二张表的 ID。

我完全不确定,但在某些旧版本的 mysql 中,更新您在更新的子查询中引用的表可能会崩溃。如果是这样,只需创建第二个表并填充(插入),然后删除旧表并重命名新表。

关于php - MySQL修复两个表中的自动增量差距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11076200/

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