|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
EXAMPLE存储引擎是一个不做任何事情的存根引擎。它的目的是作为MySQL源代码中的一个例子,用来演示如何开始编写一个新存储引擎。同样,它的主要兴趣是对开发者。EXAMPLE存储引擎不支持编索引。本来一向都没有弄分明sqlserver中and和or的优先级干系,觉得他们的优先级都是一样,在实行的时分按呈现的按次从左到右实行。但明天我在写一个束缚,以下:
(number>0andprenumber>0)or(number<0andprenumber<0)
保留后体系老是主动将我的束缚修正以下:
number>0andprenumber>0ornumber<0andprenumber<0
就是往失落了我的括号,我想,怎样会如许呢?如许不就改动了我的语意了吗?呵呵,查询材料后得知,本来,下面两个束缚的意义是一样的。
缘故原由:在SqlServer中,and的优先级比or的优先级要高。地点,在下面的束缚中,会先实行or双方的and前提,再实行or前提。
上面,我们能够做一个测试。
创立表及数据以下:
if(object_id(table1)isnotnull)
begin
droptabletable1
end
go
createtabletable1
(
IDintidentity(1,1)primarykey,
num1intnotnull,
num2intnotnull
)
insertintotable1(num1,num2)
select-1,-1
unionall
select-1,2
unionall
select1,2
unionall
select0,0
然后我们实行sql
select*fromtable1wherenum1>0ornum2>0andnum1<0
假如or与and的优先级是一样的话,那末应当只能查出一条数据,即
IDnum1num2
2-12
但实践上,我们实行后发明,这有查出两条数据了,
IDnum1num2
2-12
312
这是由于它先实行了and的前提,再实行or的前提,即同等以下:
select*fromtable1wherenum1>0or(num2>0andnum1<0)
那末,假如我们必定要sql先实行or前提,就要利用()来改动前提的实行按次了。仍是下面的sql,假如我们要先实行or前提,能够修正sql以下:
select*fromtable1where(num1>0ornum2>0)andnum1<0
导致了一个使用几乎和mSQL一样的API接口的用于他们的数据库的新的SQL接口的产生,这样,这个API被设计成允许为用于mSQL而写的第三方代码更容易移植到MySQL。 |
|