Tự động hoàn thành trong máy khách dòng lệnh MySQL


81

Trong Linux và nhiều hệ thống khác, khi điều hướng thiết bị đầu cuối, bạn có thể nhấn Tabđể tự động điền tên thư mục hoặc tệp.

Tôi tự hỏi liệu có bất kỳ điều gì như vậy trong thiết bị đầu cuối MySQL không. Ví dụ, nếu tôi muốn để có được những mô tả của someTableWithRidiculousLongNametôi có thể gõ describe someTableWsau đó Tabvà nó sẽ tự động hoàn thành phần còn lại.

Có bất cứ điều gì như vậy tồn tại trong MySQL terminal không?


2
Hãy thử mycli, github.com/dbcli/mycli
CodyChan vào

Câu trả lời:


122

Chỉnh sửa hoặc tạo một tệp có tên .my.cnftrong thư mục chính của bạn, chứa:

[mysql]
auto-rehash

@galarant không nhất thiết, nó tốt hơn là tùy chọn
rkmax

2
@rkmax - Nó vẫn là tùy chọn với --disable-auto-rehashcờ. Nhưng bây giờ bạn đã bật nó theo mặc định.
T Zengerink,

3
Tuy nhiên, nó không hoạt động khi tôi nhập các lệnh bằng chữ cái nhỏ.
alhelal

84

Để bật tính năng tự động hoàn thành trong loại lời nhắc MySQL:

mysql> \#

Sau đó, bạn có thể nhập:

mysql> describe someTableW[TAB]

Để có được:

mysql> describe someTableWithRidiculousLongName

7
tại sao đó không phải là mặc định?
Oussama Elgoumri

1
đơn giản và thanh lịch
sp1rs

1
mysql> rehash - Để thay thế cho "\ #", chúng ta cũng có thể gõ lệnh mysql "rehash" như sau. Suy nghĩ về việc chia sẻ là "rehash" có thể dễ nhớ hơn đối với một số người như tôi: mysql> rehash Sau đó, tính năng tự động hoàn thành sẽ bắt đầu hoạt động!
janeshs

1
@OussamaElgoumri Bởi vì một số người trong chúng ta thích dán các truy vấn phức tạp vào dòng lệnh và những truy vấn này có thể chứa các ký tự tab để thụt lề.
alexg

61

khởi động bảng điều khiển MySQL với tùy chọn bổ sung --auto-rehash, tức là

mysql --auto-rehash -u root -p

7
Tôi không biết tại sao điều đó không hiệu quả với tôi! tab chỉ được hiểu là một tab và không làm gì để tự động hoàn thành.
Praveen Puglia


1
Thận trọng, tính năng hoàn thành tab chỉ hoạt động sau khi một cái được kết nối với cơ sở dữ liệu như Otheus đã chỉ ra trong unix.stackexchange.com/questions/270309/…
Simeon

19

Tôi biết đây là một câu hỏi cũ, nhưng tôi đã tìm thấy ứng dụng cli MySql rất hữu ích với tính năng tự động hoàn thành nâng cao: mycli . Nó thông minh hơn nhiều so với tính năng tự động chia sẻ lại tích hợp.


6
Thay thế tuyệt vời!
kraxor

3
Oh yea, top câu trả lời notch
smac89

1
auto-rehashkhông hoạt động trên của tôi. Chuyển sang mycli và boom .... hoạt động như một người chuyên nghiệp.
Rajesh Chaudhary

3

Trên OS X 10.11.6, tôi đã đặt --auto-rehash như được mô tả ở trên, nhưng nó không hoạt động. (Đây là OS X nên mysql được biên dịch với thư viện libedit BSD .)

Sau đó, tôi nhớ rằng tôi đã đặt vi ràng buộc khóa cho máy khách mysql bằng cách tạo ~ / .editrc, chứa một dòng: bind -v . Điều này hoạt động tuyệt vời để cung cấp cho tôi điều hướng giống vi trong ứng dụng khách mysql, nhưng nó đã phá vỡ hoàn thành tên cột (tôi có thể xác minh điều này bằng cách xóa .editrc ).

Vì vậy, tôi đã nghiên cứu một chút và thấy rằng ~ / .editrc nên có ít nhất các dòng sau:

bind -v
bind \\t rl_complete

Với dòng bổ sung này, hoàn thành tên hoạt động chính xác trong điều hướng giống như mysql VÀ vi cũng hoạt động. (Có các cài đặt .editrc khác giúp cải thiện đáng kể điều hướng máy khách mysql, nhưng đây không phải là nơi để bắt đầu chuỗi thảo luận đó.)


2

Một số lưu ý về tự động chia sẻ lại:

Khi bạn bật tính năng tự động hoàn thành, chỉnh sửa tệp cấu hình mysql ..

[mysql]
auto-rehash

Bạn có thể làm điều đó cho tất cả người dùng hoặc chỉ cho một người dùng:

/etc/my.cnf: Tất cả người dùng

~/.my.cnf: Người dùng thực tế

Bạn cũng có thể tắt tính năng thêm tự động hoàn thành:

no-auto-rehash

Trích từ: http://www.sysadmit.com/2016/08/linux-mysql-autocompletar.html


1

Bạn cũng có thể tự động hoàn thành dựa trên lịch sử lệnh. Bắt đầu nhập, sau đó gọi các phím được liên kết với ed-search-prev-historyed-search-next-history. Điều này áp dụng nếu mysql có hỗ trợ libedit. Liên kết phím mặc định là Ctrl-P và Ctrl-N, nhưng điều này có thể được tùy chỉnh trong .editrc. Ví dụ của tôi cho Ctrl-up và Ctrl-down:

# 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

Trước đây, mysql dựa trên readline, sau đó history-search-backwardhistory-search-forwardlà các lệnh chính xác. Cấu hình sau đó là bằng .inputrc. Ví dụ tương tự như trên:

# 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

Vì vậy, giả sử bạn bắt đầu nhập selvà gọi Ctrl-Up, select * from some_long_table_namesẽ xuất hiện nếu đó là lệnh tôi đã sử dụng trước đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.