Autouzupełnianie w kliencie wiersza poleceń MySQL


81

W Linuksie i wielu innych systemach podczas nawigacji po terminalu możesz nacisnąć, Tababy automatycznie uzupełnić nazwę katalogu lub pliku.

Zastanawiam się, czy coś takiego jest w terminalu MySQL. Na przykład, jeśli chcę uzyskać opis someTableWithRidiculousLongName, mógłbym wpisać describe someTableWto, Taba resztę uzupełniłbym automatycznie.

Czy coś takiego istnieje w terminalu MySQL?


2
Wypróbuj mycli, github.com/dbcli/mycli
CodyChan

Odpowiedzi:


123

Edytuj lub utwórz plik o nazwie .my.cnfw Twoim katalogu domowym, zawierający:

[mysql]
auto-rehash

@galarant niekoniecznie, lepiej być opcjonalnym
rkmax

2
@rkmax - z --disable-auto-rehashflagą nadal jest opcjonalne . Ale teraz włączyłeś to domyślnie.
T Zengerink

3
Ale to nie działa, gdy wpisuję polecenia małą literą.
alhelal

85

Aby włączyć autouzupełnianie w wierszu poleceń MySQL:

mysql> \#

Następnie możesz wpisać:

mysql> describe someTableW[TAB]

Aby otrzymać:

mysql> describe someTableWithRidiculousLongName

7
dlaczego to nie jest domyślne?
Oussama Elgoumri

1
proste i eleganckie
sp1rs

1
mysql> rehash - Alternatywnie do „\ #” możemy również wpisać polecenie „rehash” mysql w następujący sposób. Myśl o udostępnianiu jako „powtórzeniu” może być łatwiejsza do zapamiętania dla niektórych osób, takich jak ja: mysql> rehash po tym autouzupełnianie zacznie działać!
janeshs

1
@OussamaElgoumri Ponieważ niektórzy z nas lubią wklejać złożone zapytania do wiersza poleceń, a te zapytania mogą zawierać znaki tabulacji do wcięć.
alexg


22

Wiem, że to stare pytanie, ale znalazłem bardzo pomocnego klienta MySql cli z zaawansowanym autouzupełnianiem: mycli . Jest znacznie inteligentniejszy niż wbudowana funkcja automatycznego ponownego mieszania.


7
Doskonała alternatywa!
kraxor

3
O tak, odpowiedź na najwyższym poziomie
smac89

1
auto-rehashnie działa na moim. Przełączony na mycli i boom ... działał jak zawodowiec.
Rajesh Chaudhary

4

Na OS X 10.11.6 ustawiłem --auto-rehash jak opisano powyżej, ale to nie zadziałało. (To jest OS X, więc mysql jest skompilowany z BSD libedit biblioteką ).

Potem przypomniałem sobie, że ustawiłem przypisania klawiszy vi dla klienta mysql, tworząc ~ / .editrc, zawierający jedną linię: bind -v . Działa to świetnie, dając mi nawigację podobną do vi w kliencie mysql, ale zepsuło uzupełnianie nazw kolumn (mogłem to zweryfikować usuwając .editrc ).

Więc zbadałem trochę i odkryłem, że ~ / .editrc powinno mieć co najmniej następujące linie:

bind -v
bind \\t rl_complete

Dzięki tej dodatkowej linii uzupełnianie nazw działa poprawnie w nawigacji podobnej do mysql AND vi. (Istnieją inne ustawienia .editrc, które znacznie poprawiają nawigację po kliencie mysql, ale nie jest to miejsce na rozpoczęcie tego wątku dyskusji).


3

Kilka uwag na temat automatycznego ponownego szyfrowania:

Gdy włączysz autouzupełnianie, edytuj plik konfiguracyjny mysql.

[mysql]
auto-rehash

Możesz to zrobić dla wszystkich użytkowników lub tylko dla jednego użytkownika:

/etc/my.cnf: Wszyscy użytkownicy

~/.my.cnf: Aktualny użytkownik

Możesz także wyłączyć dodawanie autouzupełniania:

no-auto-rehash

Pobrano z: http://www.sysadmit.com/2016/08/linux-mysql-autocompletar.html


1

Możesz także uzupełniać automatycznie na podstawie historii poleceń. Zacznij pisać, a następnie wywołaj klawisze powiązane z ed-search-prev-historyi ed-search-next-history. Dotyczy to sytuacji, gdy mysql obsługuje bibliotekę libedit. Domyślne skróty klawiszowe to Ctrl-P i Ctrl-N, ale można to dostosować w .editrc. Mój przykład dla Ctrl-w górę i Ctrl-w dół:

# 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

Wcześniej mysql był oparty na readline, a następnie history-search-backwardi history-search-forwardsą poprawnymi poleceniami. Konfiguracja odbywała się wtedy za pomocą .inputrc. Taki sam przykład jak powyżej:

# 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

Powiedzmy, że zacząłeś pisać seli wywoływałeś Ctrl-Up, select * from some_long_table_namepojawi się, jeśli jest to polecenie, którego użyłem wcześniej.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.