将sql粘贴到mySql命令行?

时间:2013-03-12 15:11:02

标签: mysql

我有一个定义一些sql代码的应用程序:

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种可能性? (是或否)

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

4 个答案:

答案 0 :(得分:13)

(回答旧问题 - 2015年5月编辑)

每次用户按下时,这是默认的 mysql (CLI)行为 TAB 键( mysql 使用基础 readline EditLine 库[不在Windows上])。

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

但是,将一些文本粘贴到包含TAB字符(\t0x09)的 mysql 中会触发相同的行为 - 即使没有 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'

答案 1 :(得分:3)

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

答案 2 :(得分:2)

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

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

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

或类似其他语言的东西。

答案 3 :(得分:0)

Breaking not so bad's answer 很好地解释了这个问题的原因。

来自问题:

<块引用>

如果我删除所有换行符和制表符,那么我可以粘贴进去,但这既费时又费力。

就我而言,我只是用空格替换了制表符,并且能够很好地粘贴查询。 MySQL 控制台似乎并不关心换行符,只关心选项卡。

为了防止这种情况,大多数编辑器都有一个设置,当您按下 Tab 键时,将插入制表符而不是空格。我通常以这种方式配置我的 IDE,但在这种情况下,它是我从 MySQL 工作台复制的查询。方便的是,它还具有使用空格而不是制表符的设置:

Edit > Preferences > General Editors > 检查 Tab 键插入空格而不是制表符 > 好的