考虑查询:
SELECT @xxx As thevar FROM (SELECT @xxx:=1) as temp
生成的查询总是会产生1,即使有许多其他类似的查询同时运行(或接近他们可以获得的同时),它们将@xxx设置为不同的整数。
此外,@xxx
的范围究竟是什么?
我正在尝试确定这是否是一种安全(尽管是hacky)方式,以确保将变量设置为我想要的特定查询的生命值。
这些查询针对MySQL 5.5的单个实例运行,可以在相同的连接或与数据库的不同连接上完成。
答案 0 :(得分:2)
根据我刚刚测试过的,似乎变量只在当前连接上看到。或者更确切地说,就是设置它的连接。
我相信您的SQL语句与SET statement的User Defined Variables具有相同的效果。
其中声明的文件:
用户定义的变量是特定于连接的。也就是说,其他客户端无法看到或使用由一个客户端定义的用户变量。当客户端退出时,将自动释放给定客户端连接的所有变量。
因此,如果其他查询使用自己的单独连接,那么它们将拥有自己的@xxx副本,并且不会相互干扰。你的黑客将按预期工作。但是如果使用相同的连接并且无法保证查询执行的顺序,则其他查询可以更改@xxx并影响后续查询。
关于它是否总是返回1:
SELECT @xxx As thevar FROM (SELECT @xxx:=1) as temp
它应该,但是如果使用相同的连接,则在执行子查询之后和外部选择之前,使用相同连接的单独线程执行SET @xxx=2
的异常值很大。如果我对SELECT的ATOMICITY错了,请纠正我。