mysql - 将 SQL 粘贴到 MySQL 命令行中

标签 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 上面的每一行都将显示:

Display all 1450 possibilities? (y or n)

然后是 1450 个不同的可用命令。如果我删除所有换行符和制表符,那么我可以粘贴进去,但这既费时又麻烦。有没有一种方法可以简单地粘贴上面的代码,对其进行编辑,然后将其作为一个单元执行?

最佳答案

这是每次用户按下 Tab 键时的默认 mysql (CLI) 行为(mysql 使用底层 readline EditLine 库(不在 Windows 上))。

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

但是,将一些包含 TAB 字符(\t0x09)的文本粘贴到 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/

相关文章:

java - MySql/JAVA 替换

php - 将逗号分隔的文本从输入中插入到数据库中,而没有重复的条目

java - 我在尝试连接到本地主机 phpmyadmin 时遇到错误

php - 在cakephp 3中查询获取数据

php - MySQL INSERT IGNORE 向非索引列添加 1

python - 使用python删除mysql语句

mysql - Rspec 和 capybara : saving results to database?

PHP - 将 PDO 与 IN 子句数组一起使用

javascript - 如何使用手机指纹传感器作为生物识别(指纹)扫描仪

mysql - CFSCRIPT 中的事务性能缓慢