2013-03-12 115 views
6

我有一个定义一些SQL代码的应用程序:将sql粘贴到mySql命令行中?

mySql = "SELECT  
      sq.question, 
      qs.title, 
      sq.id as question_id, 
      sq.type, 
      qs.id as option_id, 
      sri.title as rankTitle, 
      sri.id as rankId, 
      sfi.title as formTitle, 
      sfi.id as formId, 
      sq.sub_type, 
      sq.sort_order 
FROM  survey_questions as sq 
LEFT JOIN question_suboptions as qs 
ON   sq.id = qs.question_id 
LEFT JOIN survey_rankingitems as sri 
ON   sq.id = sri.question_id 
LEFT JOIN survey_formitems as sfi 
ON   sq.id = sfi.question_id 
WHERE  sq.survey_id = #{@surveyId} 
ORDER BY sq.sort_order" 

我想贴在MySQL命令行代码(双引号之间的所有内容),改变一个参数,并执行它,但我遇到了mySql上面每行都会显示的问题:

显示全部1450种可能性? (y或n)

然后1450个不同的可用命令。如果我删除所有linebreaks和制表符,然后我可以粘贴,但这是很耗时间和痛苦。有什么方法可以简单地粘贴上面的代码,编辑它,然后将它作为一个单元执行?

回答

3

也许你可以将声明保存到文本文件myTest.sql,然后使用MySQL命令source myTest.sql来运行它?然后,您可以调整文件中的SQL,保存更改并再次运行。

2

您需要删除换行符和制表符。双选项卡导致它显示Display all 1450 possibilities? (y or n)和换行符导致它提前执行。

如果是PHP,为什么不写一点脚本来剥离它呢?

echo (preg_replace("/\s+/", " ", $string)); 

或其他语言的类似内容。

10

(答到一个老问题 - 2015年5月编辑)

这是默认的mysql(CLI)的行为每个用户按下TAB关键时间(MySQL的使用了底层的ReadLineEditLine库[不在Windows上])。

默认情况下,当用户请求use数据库时,mysql读取表和字段的定义。然后,按TAB密钥使得mysql方便地提供已知表格和字段的当前输入的完成。

然而,粘贴一些文本MySQL的包含TAB字符(\t0x09)触发相同的行为 - 即使没有TAB键实际上是从键盘按下。这可能很烦人。


两个选项给mysql的可以防止这种行为,虽然。我最喜欢的是--disable-auto-rehash。另一个是--quiet-q

  • --disable-auto-rehash防止数据库,表和列名的完成(未从数据库中读取,使用rehash命令,如果以后你需要完成)。尽管保留了命令历史记录(例如通过键)。这很方便。

  • --quick-q这使得mysql的不使用历史文件并没有完成(不读取数据库定义)。

在Linux上一个可以在.bashrc添加一个别名自动使用--disable-auto-rehash

alias mysql2='mysql --disable-auto-rehash' 
+0

见识!非常感谢。希望将此解决方案写入文本文件。 – 2015-01-21 20:11:53