仓酷云

标题: MYSQL教程之MySQL中的ROWNUM的完成 [打印本页]

作者: 金色的骷髅    时间: 2015-1-16 20:12
标题: MYSQL教程之MySQL中的ROWNUM的完成
你不用花费很多时间和金钱来培训现有的职工,或者去花大价钱雇用那些拥有各种证书的开发者。因为MySQL的维护和管理在很大程度上是“傻瓜型”的。MySQL几近摹拟了Oracle,SQLServer等贸易数据库的年夜部分功效,函数。但很惋惜,到今朝的版本(5.1.33)为止,仍没有完成ROWNUM这个功效。

上面先容几种详细的完成办法.
创建实行情况以下
mysql>createtabletbl(
->idintPRimarykey,
->colint
->);
QueryOK,0rowsaffected(0.08sec)

mysql>insertintotblvalues
->(1,26),
->(2,46),
->(3,35),
->(4,68),
->(5,93),
->(6,92);
QueryOK,6rowsaffected(0.05sec)
Records:6Duplicates:0Warnings:0

mysql>
mysql>select*fromtblorderbycol;
+----+------+
|id|col|
+----+------+
|1|26|
|3|35|
|2|46|
|4|68|
|6|92|
|5|93|
+----+------+
6rowsinset(0.00sec)


1.间接在程序中完成;
这应当算是效力最高的一种,也极其便利。间接在你的开辟程序中(php/asp/C/...)等中,间接初始化一个变量nRowNum=0,然后在while纪录集时,nRowNum++;然后输入便可。

2.利用MySQL变量;在某些情形下,没法经由过程修正程序来完成时,能够思索这类办法。
弱点,@x变量是connection级的,再次查询的时分必要初始化。一样平常来讲PHP等B/S使用没有这个成绩。但C/S假如connection一只坚持则要思索set@x=0
mysql>select@x:=ifnull(@x,0)+1asrownum,id,col
->fromtbl
->orderbycol;
+--------+----+------+
|rownum|id|col|
+--------+----+------+
|1|1|26|
|1|3|35|
|1|2|46|
|1|4|68|
|1|6|92|
|1|5|93|
+--------+----+------+
6rowsinset(0.00sec)


3.利用连接查询(笛卡尔积)
弱点,明显效力会差一些。
使用表的自连接,代码以下,你能够间接试一下selecta.*,b.*fromtbla,tblbwherea.col>=b.col以了解这个办法道理。

mysql>selecta.id,a.col,count(*)asrownum
->fromtbla,tblb
->wherea.col>=b.col
->groupbya.id,a.col;
+----+------+--------+
|id|col|rownum|
+----+------+--------+
|1|26|1|
|2|46|3|
|3|35|2|
|4|68|4|
|5|93|6|
|6|92|5|
+----+------+--------+
6rowsinset(0.00sec)


4.子查询
弱点,和连接查询一样,详细的效力要看索引的设置和MySQL的优化了局。

mysql>selecta.*,
->(selectcount(*)fromtblwherecol<=a.col)asrownum
->fromtbla;
+----+------+--------+
|id|col|rownum|
+----+------+--------+
|1|26|1|
|2|46|3|
|3|35|2|
|4|68|4|
|5|93|6|
|6|92|5|
+----+------+--------+
6rowsinset(0.06sec)


做为一款开源的数据库体系,MySQL无疑是一个不做的产物。它的更新速率,文档保护都不逊于几年夜贸易数据库产物。估量鄙人一个版本中,我们能够看到由MySQL本身完成的ROWNUM。
DBaaS解决方案可以降低首次投入成本,对于那些小企业来说,他们往往认为内部部署的数据库成本太高,DBaaS的成本和灵活性优势对小企业吸引力更大,他们是云数据库解决方案的重点客户群体。
作者: 再现理想    时间: 2015-1-18 12:51
多走走一此相关论坛,多看一些实例开发,多交流0经验,没什么的,我也是刚学没多久!加油
作者: 冷月葬花魂    时间: 2015-1-22 06:22
代替了原来VB式的错误判断。比Oracle高级不少。
作者: 透明    时间: 2015-1-30 23:26
同样会为索引视图等应用带来麻烦。看看行级和事务级的快照数据放在tempdb中,就能感觉到目前架构的尴尬。
作者: 愤怒的大鸟    时间: 2015-2-6 16:54
这一点很好的加强了profiler的功能。但是提到profiler提醒大家注意一点。windows2003要安装sp1补丁才能启动profiler。否则点击没有反应。
作者: 老尸    时间: 2015-2-17 12:55
Mirror可以算是SQLServer的Dataguard了。但是能不能被大伙用起来就不知道了。
作者: 乐观    时间: 2015-3-5 19:54
SQL语言是学习所有数据库产品的基础,无论你是做数据库管理还是做数据库开发都是这样。不过具体学习的侧重点要看你将来做哪一块,如果是做数据库管理(DBA),侧重点应该放在SQLServer的系统管理上.
作者: 只想知道    时间: 2015-3-12 14:00
然后最好有实践机会,能够把实践到的和实践结合起来,其实理论思考是个非常困扰和痛苦的事情
作者: 柔情似水    时间: 2015-3-19 22:58
我个人认为就是孜孜不懈的学习




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2