平时MySQL开发时,经常用到的小技巧

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL开发过程中常用的一些技巧,包括使用MD5函数、创建带逻辑删除标识和时间戳的表、多行合并为一行、时间差计算、不走索引的查询优化、多表连接更新等操作的SQL语句示例。

前言

平时MySQL开发时,经常用到的小技巧。简单记录总结一下,方便下次查看技巧的使用方式。

1、MySQL的MD5函数

select md5(uuid());

2、MySQL建表时常有的3个字段,逻辑删除标识,创建时间,更新时间,可用Navicat for MySQL可视化建表

del_state tinyint(4) 非空 逻辑删除标识,0正常,1已删除
create_time datetime 非空 创建时间 CURRENT_TIMESTAMP
create_time datetime 非空 更新时间 CURRENT_TIMESTAMP 根据当前时间戳更新

3、MySQL某一列多行合并为一行

select user_id, group_concat(dept) from student group by user_id;

4、TIMESTAMPDIFF(unit, begin, end)函数,该函数返回begin-end的结果,其中begin和end是date或datetime表达式

select TIMESTAMPDIFF(month, '2020-08-01', '2021-11-01')

5、FIND_IN_SET(字段, 集合),查询数量上相比in函数,无限制,但是不走索引

FIND_IN_SET(id, ('1','3','5'))

6、多行转一行

select GROUP_CONCAT(目标字段 SEPARATOR ',') from 数据表

7、根据查询的数据进行更新的SQL语句格式

update table_a set type = 0 where id in(
    select temp.id from (
        select id from table_b where number like "AAA"
    ) temp
)

8、MySQL使用timediff方法时,Java处理小时数值大于23时报错的解决方案

timediff(czq.end_date, czq.start_date)
说明:timediff方法返回两个时间/日期时间值之间的差,由于时间格式中小时的最大值是23,一旦结果超过这个数字,就会报错
# 123:18:12


CONCAT(timediff(czq.end_date, czq.start_date), '')
说明:CONCAT方法返回结果为连接参数产生的字符串
# 123:18:12

9、MySQL多表连接批量更新语句示例,还可多表更新,如再加b.job = '科学家', c.number = 15

update
    A表 as a
    left join B表 as b on b.name = a.dept_name
    left join C表 as c on c.id = a.emp_id
set
    a.dept_id = b.id, a.desc = b.desc
where
    c.version_id = 25
    and c.id in (333, 666, 999)

10、使用MySQL对单行ID集合转成多行并且去重

select 
    DISTINCT substring_index(substring_index('126672,126673,126675,126676', ',', help_topic_id + 1), ',' , -1) as num 
from 
    mysql.help_topic 
where 
    help_topic_id < length('126672,126673,126675,126676') - length(replace('126672,126673,126675,126676', ',', '')) + 1

11、抑制ONLY_FULL_GROUP_BY值被拒绝的函数

-- 报错:which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
select id, product_id, info, create_time from t_history_operate group by product_id

-- MySQL提供了any_value()函数来抑制ONLY_FULL_GROUP_BY值被拒绝,另外可使用MIN或MAX聚合函数代替ANY_VALUE。
select id, product_id, info, create_time from t_history_operate where id in (
    select MAX(id) as history_id from t_history_operate group by product_id
)

12、Case When 用法

select id,    hero from t_glory_of_kings;

id    hero
1    亚瑟
2    云缨
3    后羿
4    吕布

select
    id,
    hero as '英雄',
    case hero
        when '亚瑟' then '契约胜利之剑'
        when '云缨' then '掠火神枪'
        when '后羿' then '射日弓'
        when '吕布' then '方天画戟'
    end as '装备'
from
    t_glory_of_kings;

id    英雄    装备
1    亚瑟    契约胜利之剑
2    云缨    掠火神枪
3    后羿    射日弓
4    吕布    方天画戟
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
安全 关系型数据库 MySQL
MySQL数据库高效秘籍:10个小技巧,让你轻松应对各种场景!
【8月更文挑战第25天】本文介绍了十个提升MySQL数据库效率与安全性的实用技巧。涵盖查询性能分析、索引优化、慢查询日志利用、图形化工具如MySQL Workbench的应用、性能分析工具、主从复制实现、备份与恢复策略、数据库迁移方法及安全性保障等多个方面。通过具体的示例代码展示每个技巧的实际操作方式,帮助读者深入理解并有效运用MySQL数据库。
92 0
|
2月前
|
SQL 关系型数据库 MySQL
【MySQL】根据binlog日志获取回滚sql的一个开发思路
【MySQL】根据binlog日志获取回滚sql的一个开发思路
|
7天前
|
SQL 关系型数据库 MySQL
PHP与MySQL协同工作的艺术:开发高效动态网站
在这个后端技术迅速迭代的时代,PHP和MySQL的组合仍然是创建动态网站和应用的主流选择之一。本文将带领读者深入理解PHP后端逻辑与MySQL数据库之间的协同工作方式,包括数据的检索、插入、更新和删除操作。文章将通过一系列实用的示例和最佳实践,揭示如何充分利用这两种技术的优势,构建高效、安全且易于维护的动态网站。
|
18天前
|
前端开发 Java 数据库连接
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
本文是一份全面的表白墙/留言墙项目教程,使用SpringBoot + MyBatis技术栈和MySQL数据库开发,涵盖了项目前后端开发、数据库配置、代码实现和运行的详细步骤。
24 0
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
|
29天前
|
SQL 关系型数据库 MySQL
Python小技巧——将CSV文件导入到MySQL数据库
Python小技巧——将CSV文件导入到MySQL数据库
18 0
|
2月前
|
存储 SQL 运维
运维开发.MySQL.范式与反范式化
运维开发.MySQL.范式与反范式化
47 1
|
2月前
|
SQL 关系型数据库 MySQL
SQL Server、MySQL、PostgreSQL:主流数据库SQL语法异同比较——深入探讨数据类型、分页查询、表创建与数据插入、函数和索引等关键语法差异,为跨数据库开发提供实用指导
【8月更文挑战第31天】SQL Server、MySQL和PostgreSQL是当今最流行的关系型数据库管理系统,均使用SQL作为查询语言,但在语法和功能实现上存在差异。本文将比较它们在数据类型、分页查询、创建和插入数据以及函数和索引等方面的异同,帮助开发者更好地理解和使用这些数据库。尽管它们共用SQL语言,但每个系统都有独特的语法规则,了解这些差异有助于提升开发效率和项目成功率。
228 0
|
3月前
|
存储 关系型数据库 MySQL
MySQL数据库开发进阶:精通数据库表的创建与管理22
【7月更文挑战第22天】数据库的创建与删除,数据表的创建与管理
46 1
|
3月前
|
数据库
基于PHP+MYSQL开发制作的趣味测试网站源码
基于PHP+MYSQL开发制作的趣味测试网站源码。可在后台提前设置好缘分, 自己手动在数据库里修改数据,数据库里有就会优先查询数据库的信息, 没设置的话第一次查询缘分都是非常好的 95-99,第二次查就比较差 , 所以如果要你女朋友查询你的名字觉得很好 那就得是她第一反应是查和你的缘分, 如果查的是别人,那不好意思,第二个可能是你。
57 3
|
3月前
|
Java 关系型数据库 MySQL
JPA + MySQL 开发总结
JPA + MySQL 开发总结
59 0