我有一个正在定义一些 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 上面的每一行都将显示:
Display all 1450 possibilities? (y or n)
然后是 1450 个不同的可用命令。如果我删除所有换行符和制表符,那么我可以粘贴进去,但这既费时又麻烦。有没有一种方法可以简单地粘贴上面的代码,对其进行编辑,然后将其作为一个单元执行?
最佳答案
这是每次用户按下 Tab 键时的默认 mysql (CLI) 行为(mysql 使用底层 readline 或 EditLine 库(不在 Windows 上))。
默认情况下,当用户请求使用
数据库时,mysql 读取表和字段定义。然后,按 Tab 键使 mysql 可以方便地使用已知的表和字段来完成当前输入。
但是,将一些包含 TAB 字符(\t
或 0x09
)的文本粘贴到 mysql 会触发相同的行为 - 即使没有 < kbd>Tab 键实际上是从键盘上按下的。这可能很烦人。
不过,为 mysql 提供的两个选项可以防止这种行为。我最喜欢的是 --disable-auto-rehash
。另一个是--quiet
或-q
。
--disable-auto-rehash
防止数据库、表、列名补全(不是从数据库读取的,使用rehash
命令如果稍后您需要完成)。不过,命令历史记录会保留(例如,通过 ↑ 和 ↓ 键检索)。哪个方便。--quick
或-q
这使得 mysql 不使用 history 文件并且没有完成(不读取数据库定义)。
在 Linux 上,可以在 .bashrc
中添加一个别名以自动使用 --disable-auto-rehash
alias mysql2='mysql --disable-auto-rehash'
关于mysql - 将 SQL 粘贴到 MySQL 命令行中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15364945/