|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
在ORDERBY操作中,MySQL只有在排序条件不是一个查询条件表达式的情况下才使用索引。(虽然如此,在涉及多个数据表查询里,即使有索引可用,那些索引在加快ORDERBY方面也没什么作用)。在sqlserver2005,假如要获某个表最新增添的自增量,我们都晓得,可使用COPE_IDENTITY、
IDENT_CURRENT和@@IDENTITY三个函数,由于它们都前往拔出到标识列中的值。但这三个函数是否是不论甚么时分,前往的值都一样的呢?谜底是错的,自己之前恰是由于没有了解到这三个函数的区分,以是取到了毛病的自增量。
起首我们来看一下三个函数的界说:
@@IDENTITY:前往为跨一切感化域确当前会话中的某个表天生的最新标识值。
SCOPE_IDENTITY:前往为以后会话和以后感化域中的某个表天生的最新标识值。
IDENT_CURRENT:前往为某个会话和用域中的指定表天生的最新标识值。
在详解之前,我们先懂得甚么是会话与感化域:
sql会话:用户使用sql命令或利用查询剖析器毗连到数据库时,一个新的会话就创建了,一向到该毗连断开,大概用户重置该毗连为止,都处于统一个会话中。
感化域:假如多个语句处在统一个存储历程,函数,批处置中,那末它们位于不异的感化域中。
懂得会话与感化域后,信任读者对以上三个函数都有了也许的了解了。我们再举个例子来讲明。
假定有表T1与T2,T1与T2表都包括自增列ID。我们在T1表中利用insert触发器往T2中增加数据。
如今我们往T1表增加新数据,假定T1表新的ID值为1000,T1表的触发器往T2表增加数据T2表发生的新ID值
为2000,
那末实行完拔出语句后即刻实行
select@@IDENTITY
selectSCOPE_IDENTITY()
selectIDENT_CURRENT(T1)
selectIDENT_CURRENT(T2)
前往值应为:
2000
1000
1000
2000
延长提示:我们在写拔出语句时总喜好前往最新的ID值,Sql通常为如许写的
insertinto表(列)values(值);
select@@IDENTITY
好比动软主动天生的代码就是云云,
实在@@IDENTITY是不保险的,SCOPE_IDENTITY()才是最保险的
附上另两个与自量列有关的函数:
1、猎取标识列的种子值
可以使用函数IDENT_SEED,用法:
SELECTIDENT_SEED(表名)
2、猎取标识列的递增量
可以使用函数IDENT_INCR,用法:
SELECTIDENT_INCR(表名)InnoDB数据表的索引,与InnoDB数据表相比,在InnoDB数据表上,索引对InnoDB数据表的重要性要大得多。在InnoDB数据表上,索引不仅会在搜索数据记录时发挥作用,还是数据行级锁定机制的苊、基础。 |
|