Mysql常用技巧汇总

时间:2022-09-16 19:12:31
Mysql使用技巧
1、在表有外键关联时不能直接删除数据,可以先将外键检查关闭,删除数据后再打开
#关闭外键检查
SET FOREIGN_KEY_CHECKS=0;
#打开外键检查
SET FOREIGN_KEY_CHECKS=1;

2、时间字段取,前一天或后一天的函数date_sub(curdate(),INTERVAL expr type)
#select date_sub(curdate(),INTERVAL expr type) from dual;
正数是时间往前推,type 是day表示按天,month表示按月,year表示按年
SELECT CURDATE(),DATE_SUB(CURDATE(),INTERVAL 1 DAY) FROM DUAL;
result: 2017-07-26 2017-07-25
负数是时间往后推
SELECT CURDATE(),DATE_SUB(CURDATE(),INTERVAL -1 DAY) FROM DUAL;
result: 2017-07-26 2017-07-27
SELECT CURDATE(),DATE_SUB(CURDATE(),INTERVAL -1 MONTH) FROM DUAL;
result: 2017-07-26 2017-08-26
SELECT CURDATE(),DATE_SUB(CURDATE(),INTERVAL -1 YEAR) FROM DUAL;
result: 2017-07-26 2018-07-26

3、字符串和时间的转换
date_format(date, format) 函数,MySQL日期格式化函数date_format()
str_to_date(str, format) 函数
unix_timestamp(),unix_timestamp(date) 函数 #字符串和date转化为时间戳
from_unixtime(unix_timestamp),from_unixtime(unix_timestamp, format) 函数,#时间戳转化为时间或字符串

#date转化为字符串
SELECT CURDATE(),DATE_FORMAT(CURDATE(),'%Y-%m-%d %H:%i:%s'),DATE_FORMAT(CURDATE(),'%Y-%M-%d'),DATE_FORMAT(CURDATE(),'%y-%m-%d'),DATE_FORMAT(CURDATE(),'%Y-%m-%D') FROM DUAL;
result:2017-07-27 2017-07-27 00:00:00 2017-July-27 17-07-27 2017-07-27th
#字符串转化为date
SELECT '2017-07-27',STR_TO_DATE('2017-07-27','%Y-%m-%d %H:%I:%S') FROM DUAL;
result:2017-07-27 2017-07-27 00:00:00
#时间和字符串转化为时间戳
SELECT CURDATE(),UNIX_TIMESTAMP(),UNIX_TIMESTAMP(CURDATE()),UNIX_TIMESTAMP('2017-07-27 14:22:33') FROM DUAL;
result:2017-07-27 1501136577 1501084800 1501136553
#时间戳转化为date和字符串
SELECT NOW(),CURDATE(),FROM_UNIXTIME(UNIX_TIMESTAMP()),FROM_UNIXTIME(150930294),FROM_UNIXTIME(150930294,'%Y-%m-%d') FROM DUAL;

result:2017-07-27 14:35:25 2017-07-272017-07-27 14:35:25 1974-10-14 05:04:541974-10-14


4、同一张表两个字段值互换
表test包括id,column1和column2,3个字段,id是主键,将column1和column2互换值。
不能使用update test set column1=column2,column2=column1;
因为更新是分步骤来的第一步column1=column2后,这时候column1的值和column2是相同的,再column2=column1就没用了。
所以需要使用下面这种方法
update test a,test b
set a.column1=b.column2,
    a.column2=b.column1
where a.id=b.id;