竹磬网-邵珠庆の日记 生命只有一次,你可以用它来做些更多伟大的事情–Make the world a little better and easier


101月/160

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;"/>

1511月/116

mysql批量删除指定前缀表,批量修改表名SQL语句

发布在 邵珠庆

  1. Select CONCAT( 'drop table ', table_name, ';' )  
  2. FROM information_schema.tables  
  3. Where table_name LIKE 'uc_%';  

注意: like ‘uc_%’ 其中 uc_是你需要替换的表前缀.
执行查询,会自动生成出 drop table table_name这样的SQL语句.
然后复制 drop语句 可以执行删除的操作了.

这么一来也可以安全的审核一下语句,避免误操作..

顺便补充一下一个批量修改表名的操作方法

  1. Select CONCAT( 'ALTER TABLE ', table_name, 'RENAME TO ', table_name,';' )  
  2. FROM information_schema.tables  
  3. 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,从第几个开始取

  1. Select CONCAT( 'ALTER TABLE ', table_name, 'RENAME TO db_'substring(table_name,3),';' )  
  2. FROM information_schema.tables  
  3. Where table_name LIKE 'db%';  

会得到结果

  1. ALTER TABLE uc_aaa RENAME TO uc_aaa;  
  2. ALTER TABLE uc_bbb RENAME TO uc_bbb;  

批量复制一下到记事本或者 et之类的编辑工具中,然后批量替换 RENAME TO uc 成 RENAME TO 你想要的表前缀
完成后 再执行.

这样就完成了表名的批量修改拉…

59月/1128

从 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