2009-10-19 92 views
6

我习惯了MSSQL的查询分析器。需要将一些SP转换为业余爱好项目,我无法过渡到mysql查询浏览器,特别是在使用变量时。我基本上试图在程序开始之前模拟一个程序。MySQL查询浏览器 - 使用变量

因此,在查询分析器中我会写这样的事情...

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 

然后我会玩的查询(因它的方式更加复杂的是,例如,一个),直到我得到它的权利,或者我会替换这些变量的值,因为它们在查询的主体中被使用了100次,这是很多重新输入的。

所以我的问题是如何让它在MySQL的查询浏览器中工作。

据我所知,它只执行任何突出显示的语句(光标在该行或文本块上)。我想我明白,“开始交易”按钮应该以某种方式使用,但我不能得到它。这里是我到目前为止

DELIMITER $$ 

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

delimiter ; 

感谢您的帮助。我似乎无法解决这个问题。

+0

有趣的问题!我也希望看到这个答案。 – 2009-10-19 02:51:27

回答

0

如何使用脚本选项卡而不是结果集选项卡?这样你可以执行多个语句。

+0

脚本标签不允许您查看SELECT的结果。 – 2009-10-19 11:33:23

1

通常,MySQL查询浏览器将为您从查询选项卡执行的每条语句使用单独的连接。这包括自动提交语义。这意味着,如果您将INSERT表记录到表中,则立即所有连接到同一服务器的其他客户端都可以看到新记录。

如果您点击“开始交易”按钮,这将有所不同。只要您没有点击“回滚”或“提交”按钮,您在该查询选项卡中执行的所有操作都将处于单个交易中。

要尝试此操作,请同时连接两个客户端,至少一个是查询浏览器。在另一个客户端做一个SELECT COUNT(*) FROM testtable,假设这样的表存在。

现在,在查询浏览器中点击“开始交易”按钮。将新记录插入测试表。做不是还击中了提交按钮,而是在相同的查询浏览器中执行相同的操作SELECT COUNT(*) FROM testtable。您会看到一个比另一个客户端高的值,因为此SELECT与您刚刚完成的INSERT处于相同的交易。 在另一个客户端中重新执行SELECT,看到您仍然获得相同的值,因为您尚未看到未提交的INSERT

在查询浏览器中,现在点击“提交”按钮,第三次在其他客户端重新运行SELECT。现在你也会看到增加的行数。

我还没有尝试过使用变量,但我认为这应该工作得很好。

希望有帮助!

2

划定查询,像这样分号:

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

当你把光标移动到那里的查询将被高亮显示。

然后只需按Ctrl-Enter即可执行您想要执行的查询。

每个选项卡都保留其自己的会话,所以@var的值将在您执行第一个查询后保持定义。您可以根据需要多次重新运行第二个查询。

+0

澄清:如果首先按下启动事务按钮,则只有这样。只有这样第二条语句才会显示变量的赋值!否则,第二个查询将返回其他值作为NULL。 – 2009-10-19 13:08:38

+1

'@Daniel Schneller':不,这是不正确的。变量是会话绑定的,而不是事务绑定的。去尝试一下。 – Quassnoi 2009-10-19 13:31:52

+0

这就是我在评论之前所做的。看到这里:http://picasaweb.google.com/lh/photo/ELAIKb0BCCRw1DC1i2TIMQ?feat=directlink和在这里:http://picasaweb.google.com/lh/photo/47es8mXWyGNNNUBO8mjg9A?feat=directlink – 2009-10-20 08:07:29

0

看起来不像我想要的是真的可能。我只使用了两个选项卡 - 一个用于编辑查询的脚本选项卡和一个用于调用它的结果选项卡。它的工作原理,但它不像MSSQL查询分析器这么简单。