我有3个表需要导出为.sql以便将来导入。我需要导出的主表通过另一个表与一个表有关系。您可以看到以下模式的提要:
主要问题是每个表的id都不像预期的那样从1开始,因为在开发阶段有很多测试输入。
在此示例中,是否可以在.sql文件中将包含已重置ID的关系(image_tags,标签)的图像表导出到图像等(对于其他表,等等),但保持对应于新ID的关系?
答案 0 :(得分:0)
首先,在当前/ LIVE数据库中不要执行以下任何操作。如您所说,您想将数据导出到其他数据库,请将以下步骤应用于其他数据库-
第1步:使用LIVE数据库中的数据来准备新数据库。
步骤2:将2个新列“ image_id_new”和“ tag_id_new”添加到“ images_tags”表中。
步骤3:执行以下两个脚本,以更新新创建的2列-
在执行以下脚本之前,请确保“ image_id”和“ tag_id”两列中均没有0值可用
UPDATE images_tags A
INNER JOIN
(
SELECT image_id,
@row_num := IF(`image_id` <> 0,@row_num+1,0)AS RowNumber
FROM images_tags,
(SELECT @row_num := 0) r
ORDER BY image_id
)B ON A.image_id = B.image_id
SET A.image_id_new = RowNumber;
UPDATE images_tags A
INNER JOIN
(
SELECT tag_id,
@row_num := IF(`tag_id` <> 0,@row_num+1,0)AS RowNumber
FROM images_tags,
(SELECT @row_num := 0) r
ORDER BY tag_id
)B ON A.tag_id = B.tag_id
SET A.tag_id_new = RowNumber;
第4步:请删除表Images >> Images_Tags >> Tag之间的关系(如果有)。
步骤5:现在,使用以下脚本更新所有三个表-
UPDATE images A INNER JOIN images_tags B ON A.id = B.image_id
SET A.id = B.image_id_new;
UPDATE tags A INNER JOIN images_tags B ON A.id = B.tag_id
SET A.id = B.tag_id_new;
UPDATE images_tags
SET image_id = image_id_new,tag_id = tag_id_new;
步骤6:使用以下脚本从表images_tags中删除这两个新列-
ALTER TABLE `images_tags`
DROP COLUMN `tag_id_new`,
DROP COLUMN `image_id_new`;
步骤7:如果需要,重新建立表Images >> Images_Tags >> Tag之间的关系。
就是这样。希望这会有所帮助。