关于mysql中一些函数用法

本文介绍了MySQL的多种函数,如case when、IF、IFNULL等,还提及时间处理函数,像now()、sysdate()等。同时分享了处理数据库问题的方法,包括定时任务导致表锁的解决办法,以及主从日志同步失败的处理,还简单描述了主从和集群的工作机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

case when .. then ... when ... then ... else end

case when:类似于if,根据条件返回值

case when sex = '0' then '女' when sex='1' then '男' end  

或者

case when sex='0' then '女' else '男' end 

IF()            IF(TRUE,A,B) = A

                  IF(FALSE,A,B) = B

IFNULL()

                    IFNULL(字段,替换内容)

NULLIF()

               NULLIF(字段,进行对比内容) :相同则为null,不同则还是原内容

ISNULL()

                ISNULL(字段) :0 - 不为空,1 - 为空

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

SUBSTRING_INDEX(字段,分隔符,取段位置)

字段名称:var = '123_232_aaa_ewrwe,123' 

SUBSTRING_INDEX(var,'_',1) = 123

SUBSTRING_INDEX(var,'_',2) = 123_232

SUBSTRING(字段,开始位置,取值长度)

SUBSTRING(var,1,7) = 123_232

SUBSTRING(var,2,7) = 23_232_

left(字段,取值长度)

字段名称:var = 123123123123123

left(var,10)  从左到右取10位数 = 1231231231

 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------

获取系统当前时间,格式为 yyyy-MM-dd HH:mm:ss

now()、current_timestamp() :语句开始执行的时间

sysdate():函数开始执行的时间

unix_timestamp(current_timestamp())     将时间戳换成秒

 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 REPLACE('123.123.345','.','')   将字符'.'换成空字符

结果等于 123123345

 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- 

timediff:求得两个时间的时间差,返回结果为 yyyy-MM-dd HH:mm:ss 

timediff(NOW(),'2019-07-10 10:32:03') 

TIME_TO_SEC:将转换为秒

TIME_TO_SEC('00:01:19') = 79

 date_format:输出时间格式 

date_format(NOW(),'%Y-%m-%d %H:%i:%s')  = 2019-07-10 10:38:12

date_format(NOW(),'%Y-%m-%d) = 2019-07-10

 

show PROCESSLIST; -- 查询当前执行内容;

当时遇到一个mysql问题:有个15秒就执行一次的定时任务,因为当时表没有进行分表等操作,数据量太大,导致事务一直在等待执行,最终导致数据库表锁,程序无法启动;

解决办法:

       1.分表,结案少表中数据

       2.关闭事务定时任务 --  kill 线程id

简单描述主从(执行语句先执行主,在执行从):

例如:

1.204(主表,读)        

1.205(从表,写) 

主、从通过日志来进行同步;

问题:日志同步失败?

解决办法:

           1.手动解决日志同步失败

           2.主从数据库全部还原

 

简单描述集群(单机:1、3、5台机器)

--   都是双网卡(且在不同的网段上:比如 1网段、2网段)

1.201、2.201(主)

1.202、2.202(从)

1.203、2.203(从)

1.基本都有读写功能

2.语句大部分是从主开始执行

3.如果1.201宕机,那么就执行选举谁为主机(可能是1.202,也可能是1.203)

4.2网段监听心跳

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值