2013-03-12 39 views
6

Tôi có một ứng dụng được xác định một số mã sql:Dán sql vào dòng lệnh mySql?

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" 

Tôi muốn dán mã này (tất cả mọi thứ giữa dấu ngoặc kép) trong dòng lệnh MySQL, thay đổi một tham số và thực hiện nó, nhưng tôi đã gặp sự cố trong đó mọi dòng trên mySql sẽ hiển thị:

Hiển thị tất cả 1450 khả năng? (y hoặc n)

Và sau đó 1450 lệnh có sẵn khác nhau. Nếu tôi xóa tất cả các dấu ngắt dòng và tab thì tôi có thể dán vào, nhưng đó là thời gian và một nỗi đau. Có cách nào mà tôi có thể chỉ cần dán vào mã trên, chỉnh sửa nó và sau đó thực hiện nó như là một đơn vị duy nhất?

Trả lời

3

Có lẽ bạn có thể lưu câu lệnh vào tệp văn bản myTest.sql, sau đó sử dụng lệnh MySQL source myTest.sql để chạy nó? Sau đó bạn có thể tinh chỉnh SQL trong tệp, lưu các thay đổi và chạy lại.

2

Bạn cần xóa các ngắt dòng và tab. Tab kép làm cho nó hiển thị số Display all 1450 possibilities? (y or n) và ngắt dòng đang khiến nó thực thi sớm.

Nếu đó là PHP lý do tại sao không viết một đoạn mã nhỏ để loại bỏ nó cho bạn?

echo (preg_replace("/\s+/", " ", $string)); 

Hoặc điều gì đó tương tự cho các ngôn ngữ khác.

10

(trả lời cho một câu hỏi cũ - May 2015 chỉnh sửa)

Đây là mặc định mysql (CLI) hành vi mỗi khi người dùng nhấn TAB chìa khóa (mysql sử dụng cơ bản readline hoặc EditLine thư viện [không phải trên Windows]).

Theo mặc định, khi người dùng yêu cầu use cơ sở dữ liệu, mysql đọc các định nghĩa bảng và trường. Sau đó, nhấn phím TAB làm cho mysql thuận tiện cung cấp hoàn thành đầu vào hiện tại với các bảng và trường đã biết.

Tuy nhiên, dán một số văn bản vào mysql có chứa ký tự TAB (\t hoặc 0x09) gây nên các hành vi tương tự - mặc dù không TAB chủ chốt đã thực sự ép từ bàn phím. Và điều này có thể gây phiền nhiễu.


Hai tùy chọn cho mysql có thể ngăn chặn hành vi đó, mặc dù. Yêu thích của tôi là --disable-auto-rehash. Số khác là --quiet hoặc -q.

  • --disable-auto-rehash để ngăn chặn cơ sở dữ liệu, bảng, và hoàn thành tên cột (mà không được đọc từ cơ sở dữ liệu, sử dụng lệnh rehash nếu sau này bạn cần hoàn thành).Tuy nhiên, lịch sử lệnh được giữ lại (được truy xuất thông qua các số khóa). Đó là thuận tiện.

  • --quick hoặc -q mà làm mysql không sử dụng lịch sử tập tin và không hoàn thành (không đọc các định nghĩa cơ sở dữ liệu).

Trên Linux ta có thể thêm một bí danh trong .bashrc sử dụng --disable-auto-rehash tự động

alias mysql2='mysql --disable-auto-rehash' 
+0

Sâu sắc! Cám ơn rất nhiều. Ưu tiên giải pháp này để ghi vào một tập tin văn bản. –

Các vấn đề liên quan