首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >mysqldump可以每行执行一次查询吗?

mysqldump可以每行执行一次查询吗?
EN

Stack Overflow用户
提问于 2011-04-13 11:43:46
回答 3查看 1K关注 0票数 0

mysqldump是否可以每行转储一个查询?

例如,它当前转储CREATE TABLE表达式,如下所示:

代码语言:javascript
运行
复制
--
-- Table structure for table `post`
--

CREATE TABLE IF NOT EXISTS `post` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(160) NOT NULL,
  `slug` varchar(255) NOT NULL,
  `url` varchar(600) NOT NULL,
  `domain` varchar(90) NOT NULL,
  `author` int(11) NOT NULL,
  `description` text,
  `category` int(11) DEFAULT NULL,
  `score` int(11) NOT NULL,
  `ip` varchar(255) DEFAULT NULL,
  `created` datetime NOT NULL,
  `comment_count` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uc_slug` (`slug`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

-- --------------------------------------------------------

--
-- Table structure for table `users`
--

CREATE TABLE IF NOT EXISTS `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `login` varchar(12) NOT NULL,
  `password` varchar(45) NOT NULL,
  `email` varchar(150) NOT NULL,
  `about` varchar(300) DEFAULT NULL,
  `last_visit` datetime DEFAULT NULL,
  `ip` varchar(255) DEFAULT NULL,
  `created` datetime NOT NULL,
  `perm_mod` int(11) DEFAULT NULL,
  `perm_admin` int(11) DEFAULT NULL,
  `post_count` int(11) NOT NULL DEFAULT '0',
  `comment_count` int(11) NOT NULL DEFAULT '0',
  `vote_count` int(11) NOT NULL DEFAULT '0',
  `voted_count` int(11) NOT NULL DEFAULT '0',
  `forgot_key` varchar(150) DEFAULT NULL,
  `cookie_key` varchar(40) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3;

相反,我希望它像这样转储:

代码语言:javascript
运行
复制
--
-- Table structure for table `post`
--

CREATE TABLE IF NOT EXISTS `post` (`id` int(11) NOT NULL AUTO_INCREMENT,`title` varchar(160) NOT NULL,`slug` varchar(255) NOT NULL,`url` varchar(600) NOT NULL,`domain` varchar(90) NOT NULL,`author` int(11) NOT NULL,`description` text,`category` int(11) DEFAULT NULL,`score` int(11) NOT NULL,`ip` varchar(255) DEFAULT NULL,`created` datetime NOT NULL,`comment_count` int(11) NOT NULL DEFAULT '0',PRIMARY KEY (`id`),UNIQUE KEY `uc_slug` (`slug`) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

-- --------------------------------------------------------

--
-- Table structure for table `users`
--

CREATE TABLE IF NOT EXISTS `users` (`id` int(11) NOT NULL AUTO_INCREMENT,`login` varchar(12) NOT NULL,`password` varchar(45) NOT NULL,`email` varchar(150) NOT NULL,`about` varchar(300) DEFAULT NULL,`last_visit` datetime DEFAULT NULL,`ip` varchar(255) DEFAULT NULL,`created` datetime NOT NULL,`perm_mod` int(11) DEFAULT NULL,`perm_admin` int(11) DEFAULT NULL,`post_count` int(11) NOT NULL DEFAULT '0',`comment_count` int(11) NOT NULL DEFAULT '0',`vote_count` int(11) NOT NULL DEFAULT '0',`voted_count` int(11) NOT NULL DEFAULT '0',`forgot_key` varchar(150) DEFAULT NULL,`cookie_key` varchar(40) DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3;

我已经检查了mysqldump的参数,但是找不到任何可以做到这一点的东西

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-13 13:29:03

实际上,没有命令行开关来实现这一点。相反,我建议您正常地执行转储,然后使用像Notepad++这样好的文本编辑器来打开转储文件。

首先选择要转换为单行的块,然后选择下图的菜单选项。

这就是结果(对每个块重复以转换为单行):

票数 2
EN

Stack Overflow用户

发布于 2012-01-13 01:28:35

我也有类似的任务-格式化mysqldump输出文件,使其与mysql init_file选项兼容。以下是解决方案:

代码语言:javascript
运行
复制
sed ':a;N;$!ba;s/\n/THISISUNIQUESTRING/g' | sed -e 's/;THISISUNIQUESTRING/;\n/g' | sed -e 's/THISISUNIQUESTRING//g'

这会将所有换行符替换为文件中不存在的奇怪字符串。接下来,sed将这个字符串和分号的组合替换为分号和换行符。这是必需的,因为表数据可以包含包含";“的字符串值,所以直接删除所有换行符并将它们添加到分号后面并不是通用的。在那之后,剩下的奇怪的字符串就从文本中删除了。

顺便说一句,我是用--comments=false参数运行mysqldump的,因为"init_file“也不允许注释。

票数 1
EN

Stack Overflow用户

发布于 2012-09-05 08:04:52

如果您真的想要单独查询,在我的书中,最实用的解决方案是使用mysqldump的内置功能。--skip-extended-insert标志就是您想要的,它在文档中并不清楚,但它为您提供了所需的转储格式。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5644164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档