【问题标题】:How can I edit a huge SQL-dump?如何编辑一个巨大的 SQL 转储?
【发布时间】:2025-12-19 15:00:12
【问题描述】:

我有一个巨大的 SQL 转储,其中包含很多语句,例如

CREATE TABLE ...
INSERT INTO ...

等等。

我想编辑这个文件。首先,我想删除所有具有所有属性的“CREATE TABLE”语句。我只想要“INSERT INTO”语句。有没有简单的方法?我是这个领域的菜鸟。

所有“INSERT INTO”语句如下所示:

INSERT INTO 'xyz' VALUES (a, b, c, d), (e, f, g, h), (c,d,e,g) ... 

最后我想这样:

INSERT INTO 'xyz' VALUES (<tenant_id>, a, b, c, d), (<tenant_id>, e, f, g, h), ...

有没有一种简单的方法来实现这一点?例如。使用 PHP 或正则表达式?我该怎么做? 谢谢!

【问题讨论】:

  • &lt;tenant_id&gt; - 这是什么?
  • 它只是一个占位符/假人。如果转储将其包含在值中,我可以在之后填充它。我只想插入一些东西,一个变量或其他任何东西。
  • 我没有看到您的来源问题。但是为什么你不能导入你的转储,向你的能力添加新字段并只用数据创建新的转储呢?

标签: php sql regex edit mysqldump


【解决方案1】:

如果您可以访问任何类似 unix 的系统,我建议您这样做:

sed '/CREATE TABLE */d' current.dump > new.dump

它将删除所有创建表行并将其余行通过管道传输到新的转储文件

【讨论】:

  • 这也可以在 Windows 机器上完成。只需下载适用于 Windows 的 SED。
【解决方案2】:

参见http://www.thegeekstuff.com/2009/03/15-practical-unix-grep-command-examples/中的示例10“显示与所有给定模式不匹配的行”

Syntax:
grep -v -e "pattern" -e "pattern"

例如

grep -v -e "CREATE TABLE" current.dump > new.dump

假设 CREATE TABLE 语句位于一行。

对于 Windows,您可以使用 grep 命令的各种端口,例如http://stefanstools.sourceforge.net/grepWin.html

http://www.wingrep.com/

http://gnuwin32.sourceforge.net/packages/grep.htm

【讨论】: