`

平时开发mysql自己遗忘的点

 
阅读更多

整理了一些平时自己遗忘的点。

1、Mysql的substring(str,pos,len)截取与java中substring(beginIndex,endIndex)定义不同

改成

区别在与:

pos在mysql所有的substring()函数中都是以1为开始位,pos可以是负数,即从后倒数,也是从-1开始,到字符串结束,len就是指截取长度

java的substring中beginIndex为索引,因此不可为负数,默认从0开始,到endIndex-1结束

官方文档中都有例子:

http://tool.oschina.net/apidocs/apidoc?api=jdk_7u4

http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_substring

mysql的截取字段函数比较多,比较方便,也可以查阅。

 

2、按数字大小对varchar字段进行排序:

基本思路是将字段类型转换为整型类型->

1、在order by的字段前添加减号 '-'

2、在排序的字段加上数字 '1'

例子:

select * from fi_audit where 1=1 order by -user_id desc

或者

select * from fi_audit where 1=1 order by (user_id + 1) desc

备注:user_id是varchar类型。

 

3、关于group by与having

http://dev.mysql.com/doc/refman/5.0/en/group-by-handling.html

group by

典型的SQL中一个带有group by子查询中,若查询的非聚集列(聚集列包括Count等聚集函数)并没有出现在group by子句之后,但却出现在我们所要查询的列中,那么则会出错。

例子:

SELECT o.custid, c.name, MAX(o.payment)
FROM orders AS o, customers AS c
WHERE o.custid = c.custid
GROUP BY o.custid;

如这里的c.name,则会出错。可以修改将c.name加到group by子句中或者去掉c.name即可。

 

但是在mysql中允许这样的语句出现

MySQL extends the standard SQL use of GROUP BY so that the select list can refer to nonaggregated columns not named in the GROUP BY clause.

当没有在group by子句中的非聚集列,他们各自对应的所有对每个分组都是相同的时候,这是非常实用的。因为可以从任意分组选择任何值,除非它们(分组-ques)是一样的,那么选择的值是不确定的。而且上述情况并不会影响order by子句。仅仅是在值被选定之后,查询的结果排序,order by不影响服务选择每个分组中的值。

 

简单来说,当考虑到某些列的值是一样的时候,比较方便使用。也有局限性

在查询的列中,非聚集列没有写到GROUP BY子句,其值是唯一的(只会查到一行结果),但GROUP BY省略的列值实际上并不唯一。 

可以通过group_concat()获取分组的组合连接值(加上distinct可以去重):

 

当然为了维护SQL的正统地位,也可以使用ONLY_FULL_GROUP_BY的模式不允许MYSQL的这种扩展修改。可以在my.cnf文件中添加:sql_mode = 'ONLY_FULL_GROUP_BY'


设置模式链接:http://blog.csdn.net/wyzxg/article/details/8787878

这种模式设置对于mysql的having和order by的非常规SQL做法同样适用。)

 

group by的例子:

采用了上面的模式,那么下面的语句:

mysql> SELECT name, MAX(age) FROM t;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...)
with no GROUP columns is illegal if there is no GROUP BY clause

会出错,因为没有group by,name值是不确定的。

 

另外:

传统的sql不允许在group by中使用表达式(解决办法是通过给表达式起别名的方式):

SELECT id, FLOOR(value/100) AS val
FROM tbl_name
GROUP BY id, val;

而mysql中是可以的,不需要起别名。

 

having

典型的SQL,也不允许不在group by中的列出现在having子句中(order by也是)。Mysql同样对这种情况做出了放行。在这种扩展中,假定没有分组的列有着相同的分组基准(暂时这样看),不然的话,会得到不确定的结果。

 

其他用法参考传统的SQL:

where与having

where在分组前(位于group by之前)进行条件查询,但条件中不能包含聚合函数,可以使用where显示某一具体行;

having(聚合)则是筛选符合条件的分组,即分组后(位于group by之后)条件查询,条件中经常包含聚合函数,可以用having条件(也可多个)显示某些具体的分组。

 

自己的想法倾向于使用传统的SQL,这样便于自己以后工作跨数据库管理平台编写code(熟练使用者除外)。 

 

4、添加某一列以及备注

ALTER TABLE 表名 ADD 列名 varchar(12) NOT NULL comment备注

 

5、连接查询时优化

对于经常使用的数据字典表,可优化为子查询(对应的code_type)-换表,提高效率:

LEFT JOIN (select code,code_name from da_dictionary where code_type = '045') AS dd1 ON ......

 

 

 

 

 

 

 

 

  • 大小: 9.4 KB
  • 大小: 5.4 KB
  • 大小: 5.8 KB
  • 大小: 7.2 KB
  • 大小: 6 KB
  • 大小: 7.5 KB
分享到:
评论

相关推荐

    开发工具 mysql-5.5.40-win32

    开发工具 mysql-5.5.40-win32开发工具 mysql-5.5.40-win32开发工具 mysql-5.5.40-win32开发工具 mysql-5.5.40-win32开发工具 mysql-5.5.40-win32开发工具 mysql-5.5.40-win32开发工具 mysql-5.5.40-win32开发工具 ...

    C开发mysql的api中文手册

    对于以C语言为开发语言的开发者而言,如何高效、安全地与MySQL数据库进行交互是一个重要的技能点。本手册的宗旨在于提供一个全面的MySQL C API中文参考,以便帮助初学者和专业人士更深入地了解和应用这些API。 手册...

    开发工具 mysql-connector-java-5.1.40-bin

    开发工具 mysql-connector-java-5.1.40-bin开发工具 mysql-connector-java-5.1.40-bin开发工具 mysql-connector-java-5.1.40-bin开发工具 mysql-connector-java-5.1.40-bin开发工具 mysql-connector-java-5.1.40-bin...

    MySQL数据库开发规范

    MySQL数据库开发规范MySQL数据库开发规范MySQL数据库开发规范MySQL数据库开发规范

    基于 Spring Boot + MySQL 开发的博客系统源码.zip

    基于 Spring Boot + MySQL 开发的博客系统源码 基于 Spring Boot + MySQL 开发的博客系统源码 基于 Spring Boot + MySQL 开发的博客系统源码 基于 Spring Boot + MySQL 开发的博客系统源码 基于 Spring ...

    java开发环境+大数据开发环境+mysql经典面试题+mysql概念学习

    java开发环境+大数据开发环境+mysql经典面试题+mysql概念学习 java开发环境+大数据开发环境+mysql经典面试题+mysql概念学习 java开发环境+大数据开发环境+mysql经典面试题+mysql概念学习 java开发环境+大数据开发...

    C#开发MYSQL使用帮助

    使用VS2017写的,主要文件就文件夹中的MySQLDataBase.cs和Program.cs两个文件夹,如果VS版本低,可以使用其他的开发工具如Editplus等打开这两个文件进行复制粘贴到自己新建的工程中

    PHP和MySQL Web开发

    以上就是PHP和MySQL Web开发的核心知识点,通过学习这些,开发者可以构建功能丰富的、响应迅速的Web应用,满足不同业务需求。在实际工作中,不断实践和学习新的技术和工具,将使你在Web开发领域更具竞争力。

    java开发环境+mysql经典面试题+mysql概念学习

    java开发环境+大数据开发环境+mysql经典面试题+mysql概念学习 java开发环境+大数据开发环境+mysql经典面试题+mysql概念学习 java开发环境+大数据开发环境+mysql经典面试题+mysql概念学习 java开发环境+大数据开发...

    基于 Servlet+jsp+mysql 开发 javaWeb 学生宿舍管理系统

    基于 Servlet+jsp+mysql 开发 javaWeb 学生宿舍管理系统基于 Servlet+jsp+mysql 开发 javaWeb 学生宿舍管理系统基于 Servlet+jsp+mysql 开发 javaWeb 学生宿舍管理系统基于 Servlet+jsp+mysql 开发 javaWeb 学生宿舍...

    解读阿里巴巴开发规范之MySQL - 知乎.pdf

    解读阿里巴巴开发规范之MySQL - 知乎

    PHP和MySQL Web开发(原书第4版)带书签

    前段时间学习PHP 下了个PHP和MySQL Web开发(原书第4版)高清版,有将近200M,PDF文档不过没有书签,花了一天的时间将书签添加上去了,精确到了三级目录。 我没有权限上传200M的文件,所以放到百度空间了,下载后是...

    mysql权威开发指南

    全面涵盖mysql的语法和各种技巧哦,mysql开发者必备的手册。

    linux下开发,连接mysql数据库头文件和库文件(32位和64位)

    linux下开发,连接mysql数据库时候用到的头文件和库文件,32位和64位的都有,直接解压根据系统选择32位还是64位,把mysql_include和mysql_lib两个文件夹复制到主文件同级目录,然后makefile里面这样编译gcc -I./...

    浅谈mysql密码遗忘和登陆报错的问题

    下面小编就为大家带来一篇浅谈mysql密码遗忘和登陆报错的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    php mysql 应用开发

    是有关php与mysql的开发资料.iso

    微信小程序开发(PHP Laravel MySQL)教学大纲.pdf

    《微信小程序开发(PHP Laravel MySQL)教学大纲》是一份详尽的教学计划,旨在教授学生如何使用PHP、Laravel框架和MySQL数据库来开发微信小程序。以下是大纲的主要知识点: 1. **课程性质与任务**: - 作为计算机...

    MySQL数据库开发手册.CHM

    MySQL数据库开发手册,手册结构目录如下 1 MySQL 基础介绍htm 2、MySQLZ数据定X语言DDL 3、MySQL之数据操作语言DML 4、MySQL之数据查询语言DQL 5、MySQL之数据事务管理语言TPL 6、MySQL之数据库编程

    PHP和MySQL Web开发(第五版) PDF英文高清版+源代码

    PHP和MySQLWeb开发,作者为LukeWellingLauraThomson,本书将PHP开发与MySQL应用相结合,分别对PHP和MySQL做了深入浅出的分析,不仅介绍PHP和MySQL的一般概念,而且对PHP和MySQL的Web应用做了较全面的阐述,并包括几...

    BeanSoft MySQL Java 开发套装

    "BeanSoft MySQL Java 开发套装" 是一个专为Java开发者设计的工具集合,它整合了MySQL数据库服务器、管理工具以及JDBC驱动,旨在简化Java应用程序与MySQL数据库的交互过程。这个套装尤其适合初学者和专业开发者,...

Global site tag (gtag.js) - Google Analytics