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

本文涉及的产品
RDS AI 助手,专业版
RDS Agent(兼容OpenClaw),2核4GB
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
简介: 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    吕布    方天画戟
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
安全 关系型数据库 MySQL
MySQL数据库高效秘籍:10个小技巧,让你轻松应对各种场景!
【8月更文挑战第25天】本文介绍了十个提升MySQL数据库效率与安全性的实用技巧。涵盖查询性能分析、索引优化、慢查询日志利用、图形化工具如MySQL Workbench的应用、性能分析工具、主从复制实现、备份与恢复策略、数据库迁移方法及安全性保障等多个方面。通过具体的示例代码展示每个技巧的实际操作方式,帮助读者深入理解并有效运用MySQL数据库。
757 0
|
SQL 关系型数据库 MySQL
【MySQL】根据binlog日志获取回滚sql的一个开发思路
【MySQL】根据binlog日志获取回滚sql的一个开发思路
|
JavaScript 安全 Java
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。
641 1
|
监控 前端开发 Java
【技术开发】接口管理平台要用什么技术栈?推荐:Java+Vue3+Docker+MySQL
该文档介绍了基于Java后端和Vue3前端构建的管理系统的技术栈及功能模块,涵盖管理后台的访问、登录、首页概览、API接口管理、接口权限设置、接口监控、计费管理、账号管理、应用管理、数据库配置、站点配置及管理员个人设置等内容,并提供了访问地址及操作指南。
|
SQL JavaScript 关系型数据库
node博客小项目:接口开发、连接mysql数据库
【10月更文挑战第14天】node博客小项目:接口开发、连接mysql数据库
|
SQL 关系型数据库 MySQL
PHP与MySQL协同工作的艺术:开发高效动态网站
在这个后端技术迅速迭代的时代,PHP和MySQL的组合仍然是创建动态网站和应用的主流选择之一。本文将带领读者深入理解PHP后端逻辑与MySQL数据库之间的协同工作方式,包括数据的检索、插入、更新和删除操作。文章将通过一系列实用的示例和最佳实践,揭示如何充分利用这两种技术的优势,构建高效、安全且易于维护的动态网站。
|
前端开发 Java 数据库连接
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
本文是一份全面的表白墙/留言墙项目教程,使用SpringBoot + MyBatis技术栈和MySQL数据库开发,涵盖了项目前后端开发、数据库配置、代码实现和运行的详细步骤。
478 0
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
|
存储 SQL 运维
运维开发.MySQL.范式与反范式化
运维开发.MySQL.范式与反范式化
275 1
|
存储 关系型数据库 MySQL
MySQL数据库开发进阶:精通数据库表的创建与管理22
【7月更文挑战第22天】数据库的创建与删除,数据表的创建与管理
288 1
|
数据库
基于PHP+MYSQL开发制作的趣味测试网站源码
基于PHP+MYSQL开发制作的趣味测试网站源码。可在后台提前设置好缘分, 自己手动在数据库里修改数据,数据库里有就会优先查询数据库的信息, 没设置的话第一次查询缘分都是非常好的 95-99,第二次查就比较差 , 所以如果要你女朋友查询你的名字觉得很好 那就得是她第一反应是查和你的缘分, 如果查的是别人,那不好意思,第二个可能是你。
358 3

推荐镜像

更多