MySQL为每个数据行转储一条INSERT语句


178

带有以下语句:

mysqldump --complete-insert --lock-all-tables --no-create-db 
--no-create-info --extended-insert --password=XXX -u XXX 
--dump-date yyy > yyy_dataOnly.sql

我得到如下的INSERT语句:

INSERT INTO `table` VALUES (1,'something'),(2,'anything'),(3,'everything');

我需要的是这样的:

INSERT INTO `table` VALUES (1,'something');
INSERT INTO `table` VALUES (2,'anything');
INSERT INTO `table` VALUES (3,'everything');

有没有办法告诉“ mysqldump”为每一行创建一个新的INSERT语句?谢谢你的帮助!

Answers:


277

用:

mysqldump --extended-insert=FALSE 

请注意,多次插入将比一次大插入慢。


75
--skip-extended-insert似乎对我来说是正确的语法(使用mysqldump版本10.13)
Isaac Betesh 2013年

17
速度较慢,是的,但是很多文本编辑器在处理超长文本行时遇到麻烦,如果表中包含大量数据,那将会发生。
Jahmic

mysqldump --opt --skip-extended-insertmysqldump --opt --extended-insert=FALSE工作
伊兹密尔·拉米雷斯

我的天啊!我迁移到一个新版本,这导致了这个问题,并且我的许多自动脚本失败了。我以为我被搞砸了,但这似乎很容易解决。感谢分享!
Varun Verma

11
很好,因为现在我可以git diff对两个不同的数据库转储执行操作,并且清楚地了解了所更改的内容。
罗尔夫(Rolf)'18

9

在较新的版本中,对标志进行了更改:从文档中:

--extended-insert,-e

使用包含多个VALUES列表的多行语法编写INSERT语句。这样可以生成较小的转储文件,并在重新加载文件时加快插入速度。

- 选择

默认情况下启用的此选项是--add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick-设置字符集。它提供了快速的转储操作并生成了一个转储文件,可以将其快速重新加载到MySQL服务器中。

因为--opt选项默认情况下处于启用状态,所以您仅指定它的反选项,--skip-opt可关闭一些默认设置。有关有选择地启用或禁用受--opt影响的选项子集的信息,请参见mysqldump选项组的讨论。

--skip-extended-insert

关闭扩展插入

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.