gpt4 book ai didi

MySQL - 比较两个表并生成差异 SQL 文件

转载 作者:可可西里 更新时间:2023-11-01 07:39:06 24 4
gpt4 key购买 nike

在我的数据库中,我有一个从 Internet 下载的默认表(名为“mytable”)。该表有 100 行和 10 列(字段)。

我正在更改表中的一些值,但我没有删除或插入任何行或列。

比如,在表格的第五行,我将字段“Name”的值从“Fox”更改为“Bear”。

然后我再次从互联网上下载该表,并以不同的名称将其添加到数据库中。

现在我有了表“oldtable”(包含默认值)和“mytable”,其中只有一行中的一个字段发生了变化。

现在,我想向其他人展示我在数据库中所做的更改,并向他们提供他们可以运行的 SQL 脚本,以便他们应用相同的更改。我不能给他们我自己的“我的 table ”,因为他们不能使用它。他们也有它,并且在他们认为合适的时候改变了其中的一些值。他们不想要我的表格,他们只想在他们已经对表格所做的更改之上应用我所做的更改。

所以我可以给他们这个名为“patch.sql”的文件:

connect myDatabase;
update mytable set name="Bear" where name like "Fox";

但是,我想自动创建这样一个“patch.sql”文件,这样我就不必记住我更改了什么并手动编写脚本。程序可以检查两个表之间的差异并自动生成该 SQL 文件。

是否可以在 MySQL 控制台或任何其他现有工具中执行此操作?

更新:该表有一个主键。

最佳答案

如果您与同事编辑不同的行,脚本会很简单。

但是如果你认为你可以编辑相同的行,但不同的列,它看起来像下一个:

你有2张 table

表_1:

id, col1, col2, col3
1 10 50 1
2 10 60 9
3 12 50 3
4 12 60 4
5 11 70 5

表_2:

id, col1, col2, col3
1 20 50 1
2 30 60 2
3 12 60 3
4 12 60 5
5 15 77 22

并运行这个脚本:

SELECT CONCAT('UPDATE table_1 SET '
, CASE WHEN t1.col1 != t2.col1 THEN CONCAT(' col1 = ', t2.col1) ELSE '' END
, CASE WHEN t1.col1 != t2.col1 AND t1.col2 != t2.col2 THEN ', ' ELSE ''END
, CASE WHEN t1.col2 != t2.col2 THEN CONCAT(' col2 = ', t2.col2) ELSE '' END
, CASE WHEN t1.col3 != t2.col3 AND (t1.col2 != t2.col2 OR t1.col1 != t2.col1) THEN ', ' ELSE ''END
, CASE WHEN t1.col3 != t2.col3 THEN CONCAT(' col3 = ', t2.col3) ELSE '' END
, CONCAT(' WHERE id = ', t1.id)) as update_txt
FROM table_1 t1 JOIN table_2 t2 ON t1.id = t2.id WHERE t1.col1 != t2.col1 OR t1.col2 != t2.col2 OR t1.col3 != t2.col3

您的结果将是:

UPDATE table_1 SET  col1 = 20 WHERE id = 1
UPDATE table_1 SET col1 = 30, col3 = 2 WHERE id = 2
UPDATE table_1 SET col2 = 60 WHERE id = 3
UPDATE table_1 SET col3 = 5 WHERE id = 4
UPDATE table_1 SET col1 = 15, col2 = 77, col3 = 22 WHERE id = 5

然后你只需要将结果列复制到文本文件并发送到其他部分。

这是为 UPDATE 工作的,如果你计划 INSERT/DELETE 行,脚本会更复杂,但使用相同的逻辑

关于MySQL - 比较两个表并生成差异 SQL 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33832772/

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