2009-10-19 40 views
6

Tôi đã quen với Trình phân tích truy vấn của MSSQL. Cần phải chuyển đổi một số SP cho một dự án sở thích, tôi gặp khó khăn khi chuyển sang trình duyệt truy vấn mysql, đặc biệt là khi sử dụng các biến. Tôi đang cố gắng mô phỏng một thủ tục trước khi nó là một thủ tục.Trình duyệt truy vấn MySQL - sử dụng các biến

Vì vậy, trong Query Analyzer tôi muốn viết một cái gì đó như thế này ...

delcare @var1 int 
declare @var2 varchar(30) 

set @var1 = 17 --some thing i'd normally pass to the SP 
set @var2 = 'something else id pass to the SP' 

SELECT * 
FROM table 
WHERE id = @var1 
OR textcolumn = @var2 

Sau đó, tôi muốn chơi xung quanh với các truy vấn (nguyên nhân đó là cách phức tạp hơn mà ví dụ một) cho đến khi tôi đã nhận nó đúng hoặc tôi thay thế các giá trị cho các biến vì chúng được sử dụng như 100 lần trong phần truy vấn và đó là rất nhiều việc gõ lại.

Vì vậy, câu hỏi của tôi là làm thế nào để có được điều đó để làm việc trong trình duyệt truy vấn của MySQL.

Tôi hiểu rằng nó chỉ thực hiện bất kỳ câu lệnh nào được đánh dấu (con trỏ nằm trên dòng đó hoặc khối văn bản). Và tôi nghĩ rằng tôi hiểu rằng nút "Bắt đầu giao dịch" nên được sử dụng bằng cách nào đó, nhưng tôi không thể làm cho nó đi. Dưới đây là những gì tôi có cho đến nay

DELIMITER $$ 

begin 
declare var1 varchar(1) default 'W'; 
    select count(*) from gamestatspitchers where wls = var1; 
end$$ 

delimiter ; 

Cảm ơn bạn đã trợ giúp. Tôi dường như không thể loại bỏ điều này.

+0

câu hỏi hay !. Tôi cũng muốn thấy câu trả lời cho điều này. –

Trả lời

0

Cách sử dụng tab tập lệnh thay vì tab kết quả? Bằng cách đó bạn có thể thực hiện nhiều hơn một câu lệnh.

+0

Tab tập lệnh không cho phép bạn xem kết quả SELECT. –

1

Thông thường Trình duyệt truy vấn MySQL sẽ sử dụng kết nối riêng cho mỗi câu lệnh mà bạn thực thi từ tab truy vấn. Điều này bao gồm các ngữ nghĩa tự động cam kết. Điều đó có nghĩa, nếu bạn INSERT bản ghi vào bảng, ngay lập tức tất cả các ứng dụng khách khác được kết nối với cùng một máy chủ đều có thể xem bản ghi mới, sau khi câu lệnh của bạn kết thúc.

Nếu bạn nhấn nút "Bắt đầu giao dịch", điều này sẽ khác. Miễn là bạn không nhấn nút "Rollback" hoặc "Commit", mọi thứ bạn làm trong tab truy vấn đó sẽ nằm trong một giao dịch duy nhất.

Để thử điều này, hãy kết nối hai khách hàng cùng một lúc, ít nhất một trình duyệt truy vấn. Trong ứng dụng khách khác, hãy thực hiện một số SELECT COUNT(*) FROM testtable, giả định rằng bảng đó tồn tại.

Bây giờ, trong Trình duyệt truy vấn nhấn nút "Bắt đầu giao dịch". Chèn một bản ghi mới vào bảng kiểm tra. Do không chưa nhấn nút cam kết, nhưng thay vào đó, trong cùng một trình duyệt truy vấn đó, thực hiện tương tự SELECT COUNT(*) FROM testtable. Bạn sẽ thấy một giá trị cao hơn giá trị của một ứng dụng khách khác, bởi vì SELECT này nằm trong cùng một giao dịch với số INSERT bạn vừa làm. Thực thi lại SELECT trong ứng dụng khách khác và thấy rằng bạn vẫn nhận được cùng một giá trị, bởi vì bạn không thể thấy số INSERT chưa được cam kết.

Trong Trình duyệt truy vấn hiện nhấn nút "Cam kết" và chạy lại SELECT trong ứng dụng khách khác lần thứ ba. Bây giờ bạn sẽ thấy số lượng hàng tăng lên ở đó, quá.

Tôi chưa thử sử dụng biến, nhưng tôi cho rằng điều này cũng chỉ hoạt động tốt.

Hy vọng điều đó sẽ hữu ích!

2

phân định các truy vấn với phẩy như thế này:

SELECT @var1 := 17, @var2 := 'somethingelse'; 
SELECT @var1, @var2; 

Truy vấn sẽ được đánh dấu khi bạn đặt một con trỏ trên nó.

Sau đó, chỉ cần bấm Ctrl-Enter để thực hiện truy vấn này bạn muốn thực thi.

Mỗi tab giữ phiên riêng, vì vậy giá trị của @var sẽ vẫn được xác định sau khi bạn thực hiện truy vấn đầu tiên. Bạn có thể chạy lại truy vấn thứ hai bao nhiêu lần tùy thích.

+0

Để làm rõ: Điều này chỉ đúng, nếu nút giao dịch bắt đầu được nhấn trước. Chỉ khi đó câu lệnh thứ hai sẽ hiển thị các giá trị được gán của biến đó! Nếu không thì truy vấn thứ hai sẽ trả về oth là NULL. –

+1

'@ Daniel Schneller': Không, điều đó không đúng. Các biến là ràng buộc phiên, không giao dịch bị ràng buộc. Hãy thử nó. – Quassnoi

+0

Đó là những gì tôi đã làm trước khi tôi nhận xét. Xem tại đây: http://picasaweb.google.com/lh/photo/ELAIKb0BCCRw1DC1i2TIMQ?feat=directlink và tại đây: http://picasaweb.google.com/lh/photo/47es8mXWyGNNNUBO8mjg9A?feat=directlink –

0

Không giống như những gì tôi muốn là thực sự có thể. Tôi chỉ sử dụng hai tab - một tab tập lệnh để chỉnh sửa truy vấn và tab kết quả để gọi nó. Nó hoạt động, nhưng nó không dễ dàng như MSSQL Query Analyzer cho việc này.

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