Mysql SQL Hack
Mysql数据库在实际项目应用中的sql hacks总结,包括字符串灵活处理、列交换、查询优化等。
老马历写记
这个作者很懒,什么都没留下…
展开
-
Mysql if判断 类型隐形转换注意事项
Mysql if(条件表达式, 值表达式1,值表达式2)判断时,如果条件表达式是普通字符串时,mysql会先进行隐性类型转换,将字符串转成float,然后根据float值,0为false,非0则为true。因此在进行if判断时,我们应尽量避免隐性转换,以免发生不可预知错误。原创 2019-06-26 08:49:08 · 659 阅读 · 0 评论 -
mysql 有条件地计算行数 count
count是sql的一个标准行统计函数,在实际应用中很是普遍,还有另外一种情况也经常会被用到:有条件地统计行数。除此之外,count统计时会跳过null值,部分count可用sum求和代替。原创 2019-05-26 07:17:34 · 2845 阅读 · 0 评论 -
mysql 左联left join解析及使用指南
left join在数据库编程应用中使用频率较高,而且合理使用left join有时会大大提高sql性能,降低编程复杂度。left join通常用于行记录信息补全,将not in子查询转换为一个大查询,将多个case查询转换为一个查询等。本文将讨论left join语法,left join 简单过滤、筛选机制,left join应用场景。原创 2019-05-17 10:56:35 · 4014 阅读 · 0 评论 -
mysql case when then end 和 if判断 常见使用方法
mysql有两个常用的流程控制运算符:case和if,当条件1时输出结果1,当条件2时输出结果n等待,if是简化的case,只有满足条件和不满足条件2种情况。流程控制运算符通常用于字段转换输出(整型转换成有意义的文本描述),根据条件切换取数来源,where动态条件等。原创 2019-04-15 11:09:50 · 14696 阅读 · 0 评论 -
mysql 单表、多表删除的两种关联删除方式
mysql 单表、多表删除的两种关联删除方式: delete t1 from t1,t2 where ..., delete from t1 using t1, t2 where ...以及表别名使用。原创 2019-04-11 08:51:42 · 2186 阅读 · 0 评论 -
从一段代码重构谈谈数据库应用中通过java运算减少sql的重要性
本文旨在讨论数据库应用中通过编程语言(Java、Python等)替代SQL的重要性,即SQL只负责简单的增、删、改、查操作,业务逻辑运算都由编程语言实现。我们通过一个在Code Review时碰到的真实场景谈谈编程语言和SQL各司其职的重要性。比如,用编程语言替代存储过程,用一个大查询+编程语言加工处理来替代多个小查询。原创 2019-04-10 09:37:31 · 248 阅读 · 0 评论 -
谈谈企业信息化 数据库应用中的SQL进攻型(积极型)编程
何为数据库SQL“进攻型”编程或积极性编程?通常指先处理大概率发生事件,然后再处理小概率异常事件。我们以企业进销存软件销售模块中常见的销售订单审核为例,谈谈SQL“进攻型”编程和SQL“防御型”编程的差异。对于中小企业信息化开发来说,本来开发团队人员就少,因此建议使用SQL“进攻型”,提升团队开发效率、代码质量。原创 2019-04-08 10:26:27 · 302 阅读 · 0 评论 -
mysql 行锁模拟、锁查看及排除
mysql行锁有共享锁(用于读取记录)和互斥排他锁(用于更新、删除记录)。本文讨论如何模拟普通行锁、行死锁,锁查看及排除。原创 2019-02-25 19:28:01 · 5814 阅读 · 0 评论 -
Mysql 根据出生日期计算年龄 判断起始日期是否在某个有效时间段内等日期Hack汇总
根据以往的项目经验,本文总结并汇总了一些Mysql日期处理Hack。1、根据出生日期计算年龄2、查询某个时间段内的订单列表3、判断起始日期是否在某个有效时间段内4、计算用户每个月的登录天数原创 2019-02-18 08:58:58 · 1208 阅读 · 0 评论 -
mysql null值比较及排序注意事项
使用is null或is not null进行null值判断,有时需要使用coalesce函数和ifnull函数现将null值转换为空字符串或0在进行比较运算。对字段进行排序,asc情况下null值排在最前方,desc时null值排在最后方。原创 2019-02-07 22:49:19 · 890 阅读 · 0 评论 -
mysql set @rownum 变量 实现字段递增赋值
本文讲述Mysql数据库如何实现字段递增赋值,解决门店重新连续编号问题。set @rownum=10000;update sale_zd_shops SET shop_no = (select @rownum := @rownum +1 as nid);原创 2019-02-02 22:24:10 · 3072 阅读 · 0 评论 -
mysql 根据出生日期计算年龄、日期格式化等常见日期处理相关函数使用汇总
本文分两部分,第一部分为Mysql 参考手册列举的日期、时间函数说明,如常见的:日期格式化、日期加减、日期截取。第二部分为根据项目实践谈谈常用的Mysql日期、时间函数使用案例,如:查询条件开始--截止日期,根据出生日期计算年龄,根据当前时间戳自动更新等。原创 2019-01-21 22:25:57 · 6238 阅读 · 0 评论 -
mysql 利用information_schema库COLUMNS表查看哪些表含有指定字段
通常情况下,我们可以通过:1)show columns from 表名;2)describe 表名;3)show create table 表名;等命令查看指定表包含哪些字段信息,本文讨论如何查看哪些数据表包含指定字段,显然上述命令无法实现。Mysql所有数据表的字段(COLUMN)信息都保存在information_schema.COLUMNS表中,其定义如下:CREATE TEMP...原创 2018-10-31 10:27:20 · 6541 阅读 · 0 评论 -
jdbc mysql设置rewriteBatchedStatements参数实现高性能批量处理 executeBatch返回值问题
一、摘要利用jdbc预处理PreparedStatement.executeBatch可实现sql批处理,但是数据库层面是否真正实现批处理,不同数据库表现不一。以mysql为例,只有url设置了rewriteBatchedStatements=true参数,mysql驱动才会真正执行sql批处理,才可以显著提高性能。但是一旦设置rewriteBatchedStatements=true后,Pre...原创 2018-10-27 17:29:59 · 6513 阅读 · 0 评论 -
Mysql列操作 增加列、删除列、修改列、调整列顺序 sql hacks
之前在win7下用sqlyog客户端操作mysql数据库时有个功能“reorder column”(列顺序调整)在表结构定义时被经常用到,后来在mac上使用navicat客户端(可能版本不对)居然没找到类似功能,所以只好写sql语句来实现,顺便总结下mysql 列操作相关的sql语法。原创 2018-12-25 13:42:05 · 3399 阅读 · 0 评论 -
Mysql数据库 AUTO_INCREMENT 自增序列号 跳号处理
Mysql数据库产生序列号通常使用big int类型,并设置AUTO_INCREMENT为true,这样每次insert记录的时候,序列号会自动递增。该方式当insert执行完事务发生回滚时会产生跳号,如果项目有要求,就需要处理。本文讨论自增序列号发生跳号,如何处理。原创 2018-12-20 13:59:41 · 5295 阅读 · 0 评论 -
MySql FIND_IN_SET, SUBSTRING_INDEX, REGEXP正则匹配等字符串替换、截取函数应用
Mysql数据库提供了比较丰富的字符串函数,如上文“谈谈Mysql 字符串连接 CONCAT CONCAT_WS GROUP_CONCAT区别及使用场景”中提到的字符串连接函数,本文继续讲述Mysql剩余常用字符串函数的使用注意事项及使用场景:字符串长度char_length,length; 字符串查找:positon,locate,instr; 字符串截取: substr, substring, substring_index等.原创 2018-12-08 12:25:04 · 5686 阅读 · 0 评论 -
Mysql 视图用途、使用场景、性能问题及使用注意事项
Mysql视图即是虚拟表,也称为派生表,因为它们的内容都派生自其它表的查询结果。虽然视图看起来感觉和基本表一样,但是它们部署基本表。基本表的内容是持久的,而视图的内容是在使用过程中动态产生的。本文讲述了视图的根本用途:简化sql查询、提升开发效率;视图常见使用场景;视图性能问题;视图merge和TEMPTABLE算法;视图使用注意事项。原创 2018-12-07 10:53:37 · 19731 阅读 · 0 评论 -
Mysql Stored Routines 自定义函数实现 腾讯地图gps两点间距离计算
Mysql Stored Routines,有存储过程(Procedures)和函数(Functions),在实际项目使用中用的比较多,是传统企业信息系统的最爱,比如很多分析报表几乎都依赖存储过程实现。本文描述了存储过程和函数的使用场景,一个根据经纬度坐标计算两点距离的函数demo和存储过程及函数使用注意事项。原创 2018-12-05 10:22:24 · 811 阅读 · 0 评论 -
谈谈Mysql 字符串连接 CONCAT CONCAT_WS GROUP_CONCAT区别及使用场景
Mysql数据库中字符串连接有3个常用函数:CONCAT、CONCAT_WS和GROUP_CONCAT,其中CONCAT、CONCAT_WS类似,而GROUP_CONCAT顾名思义是一个集合操作函数,本文谈谈三者区别及使用场景,同时分享一个Demo,用GROUP_CONCAT如何实现将细表物料名称汇总到主表物料详情。原创 2018-12-04 11:21:10 · 504 阅读 · 0 评论 -
谈谈mysql update语句 set顺序问题、列交换sql实现及多表更新注意事项
绝大多数数据库,在执行sql update语句时,update t set a = b, b=a 便可实现ab列值互换,赋值表达式右侧的值取的都是原始值。mysql则是例外,其单表更新是自左到右依次完成,即先完成a=b,然后在完成b=a(此时a=b),所以执行结果变成ab列都是b,然后多表更新则又不尊从该更新法则。本文讨论如何用sql实现类似编程语言引入tmp变量从而实现变量互换及mysql多表更新注意事项。原创 2018-11-27 09:43:06 · 4743 阅读 · 1 评论 -
Mysql数据库如何查看某张表table被哪些存储过程procedure使用过
一、摘要由于代码重构,修改了多张表结构,java后台代码做相应修改处理,开发人员内测没问题提交业务部门测试时发现,新客户取不到产品价格,原因是存储过程调用的还是就的数据表。为此,需要先找出哪些存储过程使用到了这些表,然后修改。那么问题来了,mysql数据库如何查看哪些存储过程使用了这些数据表呢?二、mysql数据库存储过程信息查看1、show 命令1) SHOW STATUS查看存储过程...原创 2018-10-27 13:01:22 · 7531 阅读 · 0 评论