MySql数据库 sql查询增加序号的伪列
在查询数据库的时候,我们有时候需要对查询出来的数据加上序列,1,2,3,……n
例如:我们根据表的某个字段排序后,要对这些数据加上序列,这个时候序号常常不是我们建表时设置好的自增的主键id,怎么办呢????
可能我们会用变量来解决,如下
set @rownum=0;
SELECT @rownum:=@rownum+1 AS rownum, table_name.*
FROM table_name
如果在数据库中要用一句SQL语句来实现,这又改怎么办呢????
Oracle数据库有专门的rownum来解决伪序列问题,但是MySQL却到目前为止还没有内置的函数等来解决此问题
这个问题也困扰了我一段时间,到各种上发帖也没有能回答,最后在无意间找到了这种解决方法
SELECT @rownum:=@rownum+1 AS rownum, table_name.*
FROM (SELECT @rownum:=0) r, table_name
把rownum的设置初值放到了from 和需要查询的表的前面
原文来自“老鸟的大心脏”,在这里谢谢他。
希望能帮助更多需要帮助的人……
也希望更多的高手们提出更多的漂亮的方法……
也许有人也会用到存储过程来解决,那也是一个方法,我曾经也用过,但是后来不能用存储过程了,就悲剧了
摘自 ystyaoshengting的专栏
但是程序会报错“Parameter '@rownum' must be defined.”
这时在配置文件数据库链接串后面加上“Allow User Variables=True”,就好了
<!--mysql连接字符串-->
<add key="MySqlConn" value="Server=192.168.1.238;DataBase=gm;Uid=root;Pwd=000000;Allow User Variables=True;"/>
mysql批量删除指定前缀表,批量修改表名SQL语句
- Select CONCAT( 'drop table ', table_name, ';' )
- FROM information_schema.tables
- Where table_name LIKE 'uc_%';
注意: like ‘uc_%’ 其中 uc_是你需要替换的表前缀.
执行查询,会自动生成出 drop table table_name这样的SQL语句.
然后复制 drop语句 可以执行删除的操作了.
这么一来也可以安全的审核一下语句,避免误操作..
顺便补充一下一个批量修改表名的操作方法
- Select CONCAT( 'ALTER TABLE ', table_name, 'RENAME TO ', table_name,';' )
- FROM information_schema.tables
- Where table_name LIKE 'uc_%';
下面这种代码是今天遇到的,表头前面是 db,但是没有下横线显得很乱,于是批量将”dbtable_name”改成”db_table_name”
主要用的函数是mysql的substring函数
mysql教程 substring 字符截取函数
substring(str,pos)语法substring(filed,m):截取filed字段从第m个字符开始到结束的字符串;
substring(filed,m,n):截取filed字段从第m个字符开始的长度为n的字符串;
str,字符
pos,从第几个开始取
- Select CONCAT( 'ALTER TABLE ', table_name, 'RENAME TO db_', substring(table_name,3),';' )
- FROM information_schema.tables
- Where table_name LIKE 'db%';
会得到结果
- ALTER TABLE uc_aaa RENAME TO uc_aaa;
- ALTER TABLE uc_bbb RENAME TO uc_bbb;
批量复制一下到记事本或者 et之类的编辑工具中,然后批量替换 RENAME TO uc 成 RENAME TO 你想要的表前缀
完成后 再执行.
这样就完成了表名的批量修改拉…
从 SQL 移植到 MongoDB【信息图表】
下图是使用 SQL 和 MongoDB 的对应信息图表,点击图片查看大图:
MongoDB 特征:
- 采用 C++ 开发
- 授权协议:AGPL (客户端驱动包: Apache)
- 支持自定义和二进制JSON(BSON)协议
- 主从复制支持
- JavaScript 查询表达式
- 比 CouchDB 拥有更好的及时更新特性
- 水平伸缩性,内建分区功能
- 数据存储基于内存映射文件
- 更好的使用动态查询,解决模式和列
- 性能非常高
在使用 SQL (以MySQl为例)和使用MongoDB 的区别:
http://www.mongodb.org/display/DOCS/SQL+to+Mongo+Mapping+Chart