我有一个定义一些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种不同的可用命令。如果我删除所有换行符和标签然后我可以粘贴,但这是耗时且痛苦的。有什么方法可以简单地粘贴上面的代码,编辑它然后作为一个单元执行它?
答案 0 :(得分:13)
(回答旧问题 - 2015年5月编辑)
每次用户按下时,这是默认的 mysql (CLI)行为 TAB 键( mysql 使用基础 readline 或 EditLine 库[不在Windows上])。
默认情况下,当用户向use
数据库请求时, mysql 会读取表和字段定义。然后,按 TAB 键使 mysql 方便地使用已知的表和字段完成当前输入。
但是,将一些文本粘贴到包含TAB字符(\t
或0x09
)的 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 键插入空格而不是制表符 > 好的