Dòng lệnh SQLite3: làm thế nào để bạn hủy một lệnh?


12

Tôi đã mắc lỗi khi viết lệnh tại dấu nhắc lệnh SQLite, mà bây giờ tôi muốn hủy bỏ, đây là cách dòng lệnh của tôi trông

sqlite> select * from todos'
   ...> '
   ...> ;^C

Trong trường hợp này, có thể vì tôi đã mở một trích dẫn, tôi thậm chí không thể nhấn ENTERđể chạy lệnh. Tôi chỉ nhận được một dòng tiếp tục, điều đó vẫn sẽ ít hơn lý tưởng bởi vì tôi sẽ phải chạy mã xấu và nguyên nhân và lỗi, chỉ để lấy lại quyền kiểm soát lời nhắc.
Làm thế nào tôi có thể hủy bỏ dòng / lệnh và được đưa trở lại dấu nhắc?


Có lẽ ^ D sẽ đóng stdin sqlitevà thoát ra ...
Ralph Rönnquist

2
@Ralph ctrl D làm cho sqlite thoát khỏi toàn bộ phiên, bao gồm mất bất kỳ cơ sở dữ liệu bộ nhớ nào - nếu bạn không chạy được bất kỳ.
the_velour_fog

Câu trả lời:


14

Các sqlite3giao diện sử dụng thư viện ReadLine để chỉnh sửa dòng lệnh. Bạn có thể xóa một dòng đầy đủ Ctrl+Unhưng một khi bạn đã nhấn Enter, dòng đó đã được chấp nhận và không còn có thể chỉnh sửa được nữa (tốt, nó là, nhưng không phải là một phần của tuyên bố hiện tại).

Như bạn đã nhận thấy, việc gửi phần cuối của tệp Ctrl+Dsẽ nhắc khách hàng thoát, đây không phải là điều bạn muốn.

Đặt cược tốt nhất của bạn là

  1. đóng bất kỳ chuỗi, và sau đó,
  2. trước khi đưa ra một bản cuối cùng ;, tạo ra một lỗi cú pháp.

Trong ví dụ của bạn:

sqlite> select * from todos'
   ...> '
   ...> *** I made a mistake
   ...> ;
Error: near "*": syntax error
sqlite>

Điều này sẽ đảm bảo rằng không có gì được thực thi và nó sẽ khiến bạn trong phiên SQLite với bất kỳ bảng tạm thời nào còn nguyên vẹn.


1
cảm ơn, vâng tôi nghĩ rằng đó có thể là cách giải quyết tốt nhất
the_velour_fog

1
Nếu bạn đã nhấn enter sau một phím mũi tên, tức là bạn có một cái gì đó giống như > ^[[Avà sau đó ...>, thì bạn phải đóng dấu ngoặc để hủy nó : > ]];. Nó thực sự nên hỗ trợ Ctrl + C cho việc này. Nó đáng ghét theo cách này.
mxmlnkn
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.