MySQL特殊函数使用技巧梳理

 更新时间:2023年05月13日 11:53:58   作者:testresultstomorrow  
MySQL提供了各种特殊函数,它们可以帮助管理者查询复杂的数据,资料库包括字符串函数,数学函数,日期函数,程序函数等,下面这篇文章主要给大家介绍了关于MySQL特殊函数使用技巧的相关资料,需要的朋友可以参考下

1. group_concat

使用group_concat函数,可以轻松的把分组后,name 相同的数据拼接到一起,组成一个字符串,用逗号分隔。

2. char_length

通过该函数就能获取字符长度。

3.locate

在某个字符串中的位置

4.replace

将字符串中的字符 A 替换成 B。REPLACE(name,‘A’,‘B’)

5.now

获取当前时间

6.insert into … select

INSERT INTO `brand`(`id`, `code`, `name`, `edit_date`)
select null,code,name,now(3) from `order` where code in ('004','005');

这样就能将 order 表中的部分数据,非常轻松插入到 brand 表中。

7.insert into … ignore

INSERT ignore INTO `brand`(`id`, `code`, `name`, `edit_date`)
VALUES (123, '108', '苏三', now(3));

如果 brand 表中已经存在 name 为苏三的数据了,则该 sql 语句也能正常执行,并不会报错。因为它会忽略异常,返回的执行结果影响行数为 0,它不会重复插入数据。

8.select … for update

begin;
select * from `user` where id=1
for update;
//业务逻辑处理
update `user` set score=score-1 where id=1;
commit;

这样在一个事务中使用for update锁住一行记录,其他事务就不能在该事务提交之前,去更新那一行的数据。

需要注意的是 for update 前的 id 条件,必须是表的主键或者唯一索引,不然行锁可能会失效,有可能变成表锁

9.on duplicate key update

通常情况下,我们在插入数据之前,一般会先查询一下,该数据是否存在。如果不存在,则插入数据。如果已存在,则不插入数据,而直接返回结果。

在没啥并发量的场景中,这种做法是没有什么问题的。但如果插入数据的请求,有一定的并发量,这种做法就可能会产生重复的数据。

当然防止重复数据的做法很多,比如:加唯一索引、加分布式锁等。

但这些方案,都没法做到让第二次请求也更新数据,它们一般会判断已经存在就直接返回了。

这种情况可以使用on duplicate key update语法。

该语法会在插入数据之前判断,如果主键或唯一索引不存在,则插入数据。如果主键或唯一索引存在,则执行更新操作。

INSERT  INTO `brand`(`id`, `code`, `name`, `edit_date`)
VALUES (123, '108', '苏三', now(3))
on duplicate key update name='苏三',edit_date=now(3);

这样一条语句就能轻松搞定需求,既不会产生重复数据,也能更新最新的数据。

但需要注意的是,在高并发的场景下使用on duplicate key update语法,可能会存在死锁的问题,所以要根据实际情况酌情使用。

10.show create table

有时候,我们想快速查看某张表的字段情况,通常会使用desc命令

desc `order`;

查看索引信息

show index

我们能够看到非常完整的建表语句,表名、字段名、字段类型、字段长度、字符集、主键、索引、执行引擎等都能看到

show create table
show create table `order`;

11.create table … select

有时候,我们需要快速备份表。

通常情况下,可以分两步走:

创建一张临时表

将数据插入临时表

创建临时表

create table order_2022121819 like `order`;

将 order 表的数据插入到 order_2022121819 表中,也就是实现数据备份的功能。

insert into order_2022121819 select * from `order`;

整合上面两条命令

create table order_2022121820select * from `order`;

总结

到此这篇关于MySQL特殊函数使用技巧梳理的文章就介绍到这了,更多相关MySQL特殊函数技巧内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • mysql时间戳格式化yyyy-mm-dd的使用

    mysql时间戳格式化yyyy-mm-dd的使用

    在数据库操作中,时间戳的格式化是一项基础且常用的技能,MySQL提供了灵活的时间戳格式化方法,本文就来介绍一下mysql时间戳格式化yyyy-mm-dd的使用,感兴趣的可以了解一下
    2024-10-10
  • Mysql字符串类型如何通过order by排序的正确方式

    Mysql字符串类型如何通过order by排序的正确方式

    这篇文章主要介绍了Mysql字符串类型如何通过order by排序的正确方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • MySQL中select...for update锁表

    MySQL中select...for update锁表

    select…for update在MySQL中,是一种悲观锁的用法,一般情况下,会锁住一行数据,但如果没有使用正确的话,也会把整张表锁住,本文就来介绍一下,感兴趣的可以了解一下
    2023-10-10
  • MySQL 表空间碎片的概念及相关问题解决

    MySQL 表空间碎片的概念及相关问题解决

    这篇文章主要介绍了MySQL 表空间碎片的概念及相关问题解决,帮助大家更好的理解和学习使用MySQL,感兴趣的朋友可以了解下
    2021-05-05
  • Windows中MySQL数据库下载以及安装教程(最最新版)

    Windows中MySQL数据库下载以及安装教程(最最新版)

    这篇文章主要给大家介绍了关于Windows中MySQL数据库下载以及安装的相关资料,很多朋友刚开始接触mysql数据库服务器,对安装使用教程不太明白,这里给大家总结下,需要的朋友可以参考下
    2023-09-09
  • mysql 获取今天、昨天0点时间戳的实例

    mysql 获取今天、昨天0点时间戳的实例

    今天小编就为大家分享一篇mysql 获取今天、昨天0点时间戳的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • MySQL事务的四大特性以及并发事务问题解读

    MySQL事务的四大特性以及并发事务问题解读

    这篇文章主要介绍了MySQL事务的四大特性以及并发事务问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • MySQL DEFINER具体使用详解

    MySQL DEFINER具体使用详解

    在 MySQL 数据库中,在创建视图及函数的时候,你有注意过 definer 选项吗?本篇文章主要介绍下 MySQL 中 definer 的含义及作用,感兴趣的可以了解一下
    2021-08-08
  • MySQL如何修改密码过期时间

    MySQL如何修改密码过期时间

    MySQL修改密码过期时间的方法,包括修改my.ini文件、设置账号过期时间、查看过期时间和账号状态,并在修改后重启服务和密码
    2025-02-02
  • mysql快速添加百万条记录的语句

    mysql快速添加百万条记录的语句

    本文介绍一下关于MySQL使用INSERT SELECT批量插入数据的方法
    2013-11-11

最新评论