Автозавершення в клієнтському рядку MySQL


81

У Linux та багатьох інших системах під час навігації по терміналу ви можете натиснути Tabдля автоматичного заповнення імені каталогу або файлу.

Мені цікаво, чи є щось подібне в терміналі MySQL. Наприклад, якщо я хочу отримати опис, someTableWithRidiculousLongNameя міг би ввести describe someTableWтоді, Tabі це автоматично заповнило б решту.

Чи існує щось подібне в терміналі MySQL?


2
Спробуйте mycli, github.com/dbcli/mycli
CodyChan

Відповіді:


123

Відредагуйте або створіть файл, що називається .my.cnfу вашому домашньому каталозі, що містить:

[mysql]
auto-rehash

@galarant не обов'язково, краще бути необов'язковим
rkmax

2
@rkmax - Це все ще необов’язково з --disable-auto-rehashпрапором. Але тепер ви ввімкнули його за замовчуванням.
T Zengerink

3
Але це не працює, коли я вводжу команди з малої літери.
alhelal

85

Щоб увімкнути автозаповнення в запиті MySQL:

mysql> \#

Після цього ви можете набрати:

mysql> describe someTableW[TAB]

Отримати:

mysql> describe someTableWithRidiculousLongName

7
чому це не за замовчуванням?
Oussama Elgoumri

1
просто і елегантно
sp1rs

1
mysql> rehash - Як альтернативу "\ #", ми також можемо ввести команду "rehash" mysql наступним чином. Думка про спільний доступ як "повторне повторення" може бути легше запам'ятати для деяких людей, таких як я: mysql> rehash Після цього автозаповнення почне працювати!
janeshs

1
@OussamaElgoumri Оскільки деякі з нас люблять вставляти складні запити в командний рядок, і ці запити можуть містити символи табуляції для відступу.
alexg

61

запустити консоль MySQL з додатковою опцією --auto-rehash, тобто

mysql --auto-rehash -u root -p

7
я не знаю, чому це не працює у мене! вкладка інтерпретується лише як вкладка і не робить нічого для автоматичного заповнення.
Praveen Puglia


1
Обережно, tabcomplete працює лише після підключення до бази даних, як зазначив Отей
Симеон

22

Я знаю, що це старе питання, але я знайшов дуже корисний клієнт MySql cli з розширеним автозавершенням: mycli . Це набагато розумніше, ніж вбудована функція автоматичного перепрофілювання.


7
Відмінна альтернатива!
kraxor

3
О так, найкраща відповідь
smac89

1
auto-rehashне працює на моєму. Переключився на mycli і бум .... працював як професіонал.
Раджеш Чаудхарі

4

В OS X 10.11.6 я встановив --auto-rehash, як описано вище, але це не спрацювало. (Це OS X, тому mysql компілюється з BSD libedit бібліотекою .)

Потім я згадав, що встановив прив'язки клавіш vi для клієнта mysql, створивши ~ / .editrc, що містить один рядок: bind -v . Це чудово працює для того, щоб забезпечити мені ві-подібну навігацію в клієнті mysql, але це порушило заповнення імені стовпця (я зміг це перевірити, видаливши .editrc ).

Тож я трохи дослідив і виявив, що ~ / .editrc повинен мати принаймні такі рядки:

bind -v
bind \\t rl_complete

За допомогою цього додаткового рядка заповнення імені коректно працює в mysql І vi-подібна навігація також працює. (Існують інші налаштування .editrc, які значно покращують навігацію клієнта mysql, але тут не місце починати цю тему обговорення.)


3

Кілька приміток про автоматичну повторну обробку:

Коли ви вмикаєте автозавершення редагування файлу конфігурації mysql ..

[mysql]
auto-rehash

Ви можете зробити це для всіх користувачів або лише для одного користувача:

/etc/my.cnf: Всі користувачі

~/.my.cnf: Фактичний користувач

Ви також можете відключити автозавершення, додавши:

no-auto-rehash

Витягнуто з: http://www.sysadmit.com/2016/08/linux-mysql-autocompletar.html


1

Ви також можете автоматично заповнити на основі історії команд. Почніть набирати текст, а потім викликайте ключі, які прив'язані до ed-search-prev-historyта ed-search-next-history. Це стосується, якщо mysql поставляється з підтримкою libedit. Типовими прив'язками клавіш є Ctrl-P та Ctrl-N, але це можна налаштувати в .editrc. Мій приклад для Ctrl-вгору та Ctrl-вниз:

# start typing, then press Ctrl-Up
bind "\e[1;5A" ed-search-prev-history
# start typing, then press Ctrl-Up, then Ctrl-Down
bind "\e[1;5B" ed-search-next-history

Раніше mysql базувався на лінії зчитування, а потім history-search-backwardі history-search-forwardє правильними командами. Тоді конфігурація здійснювалася за допомогою .inputrc. Той самий приклад, що і вище:

# these are the key bindings for the readline library
# start typing, then press Ctrl-Up
"\e[1;5A": history-search-backward
# start typing, then press Ctrl-Up, then Ctrl-Down
"\e[1;5B": history-search-forward

Отже, скажімо, ви почали вводити текст selі викликаєте Ctrl-Up, select * from some_long_table_nameз’явиться, якщо це команда, яку я використовував раніше.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.