MySQL中数据处理小技巧

平时开发中经常与数据库打交道,mysql又是现在比较常用的数据库,此文总结下平时会用到的mysql的小技巧。

1、创建备份表

sql 复制代码
create table x like y;

快速创建和y结构一样的表x

2、获取上一次插入的自增ID

sql 复制代码
select 0

处理数据时比较有用,比如插入一条数据后,要获取插入数据的自增主键ID,就可以使用0

3、批量插入

可使用如下语句:

sql 复制代码
INSERT INTO table1(col1,col2) select col1,col2 from table2

或使用如下语句:

sql 复制代码
INSERT INTO table1(col1,col2) values (1,2),(2,3),(3,4);

批量插入比单条插入效率要高很多。

补充另外3个(插入的属性列中包含主键或者唯一索引): 1、insert ignore into 当根据主键或唯一索引判定重复时,直接忽略该条数据,执行下一条;

2、replace into 当表中存在重复数据时,则先删除此行数据,然后插入新的数据,相当于 delete + insert;

3、insert into ... on duplicate key update... 当数据重复时,执行后面的update部分,当数据不存在时,执行insert.

4、合并alter操作

可以把针对同一个表的alter操作合并,提高效率

sql 复制代码
alter table tableName add column col1 int(11), add column col2 varchar(20);

5、随机获取一条数据

不推荐使用 by rand();

可使用如下sql:

sql 复制代码
SELECT * FROM users AS t1 JOIN (SELECT ROUND(RAND()*(SELECT MAX(id) 
FROM users)) AS id) AS t2 WHERE t1.id>=t2.id ORDER BY t1.id LIMIT 1;

6、日期处理

sql 复制代码
SELECT  CURDATE() #当前日期
SELECT  NOW() #当前时间
SELECT  YEAR('2020-06-29 22:31:30') #获取时间的年份
SELECT  MONTH('2020-06-29 22:31:30') #获取时间的月份
SELECT  DAY('2020-06-29 22:31:30') #获取时间的天数
SELECT  HOUR('2020-06-29 22:31:30') #获取时间的小时
SELECT  MINUTE('2020-06-29 22:31:30') #获取时间的分钟
SELECT  SECOND('2020-06-29 22:31:30')  #获取时间的秒数
SELECT  DATE_SUB(NOW(),INTERVAL 1 YEAR)  #在目前的时间减去一年 
SELECT  DATE_ADD(NOW(),INTERVAL 1 YEAR)  #在目前的时间上加上一年
SELECT UNIX_TIMESTAMP('2020-06-29')  #字符串转换成时间戳
SELECT FROM_UNIXTIME(1593360000) #时间戳转化为时间
SELECT DATE_FORMAT('2020-06-29 22:31:30', '%Y-%m-%d %H:%i:%s') #字符串转化为时间格式

7、判空

IFNULL(expr1,expr2)

用法:假如expr1不为NULL,则 IFNULL() 的返回值为expr1; 否则其返回值为 expr2。

ISNULL(expr)

用法:如expr 为null,那么isnull() 的返回值为 1,否则返回值为 0。

8、正则匹配

查找name字段中以'zh'开头的数据:

sql 复制代码
SELECT name FROM users WHERE name REGEXP '^zh';

查找name字段中以'ng'结尾的数据:

sql 复制代码
SELECT name FROM users WHERE name REGEXP 'ng$';

查找name字段中包含'li'字符串的数据:

sql 复制代码
SELECT name FROM users WHERE name REGEXP 'li';

9、定义临时变量

sql 复制代码
set @cur = now();
select date_format(now(), '%Y-%m-%d'), date_format(date_add(@cur,interval 1 day), '%Y-%m-%d');

10、使用行号

sql 复制代码
SELECT
   USER.*, (@rownum := @rownum + 1) AS ROWNUM
FROM
   USER
INNER JOIN (SELECT @rownum := 0) r
WHERE
   1
ORDER BY
   USER.id;

以上几点在数据处理中会用到,以后遇到其他的再补充,大家如果有其他小技巧,欢迎评论补充!

引用:river's blog

相关推荐
鼠鼠我捏,要死了捏1 小时前
MySQL 索引设计与查询性能优化实践指南
数据库·mysql·性能优化
HMBBLOVEPDX1 小时前
MySQL的单行函数:
数据库·mysql·函数
小豪GO!2 小时前
MySQL索引和事务笔记
数据库·笔记·mysql
DemonAvenger4 小时前
SQL语句详解:SELECT查询的艺术 —— 从基础到实战的进阶指南
数据库·mysql·性能优化
程序猿小D4 小时前
基于SpringBoot+MyBatis+MySQL+VUE实现的便利店信息管理系统(附源码+数据库+毕业论文+远程部署)
数据库·spring boot·mysql·vue·mybatis·毕业论文·便利店信息管理系统
飞翔的佩奇5 小时前
Java项目:基于SSM框架实现的济南旅游网站管理系统【ssm+B/S架构+源码+数据库+毕业论文+远程部署】
java·数据库·mysql·毕业设计·ssm·旅游·毕业论文
rannn_1115 小时前
【MySQL学习|黑马笔记|Day3】多表查询(多表关系、内连接、外连接、自连接、联合查询、子查询),事务(简介、操作、四大体系、并发事务问题、事务隔离级别)
数据库·笔记·后端·学习·mysql
打野二师兄5 小时前
Undo、Redo、Binlog的相爱相杀
mysql·mys
DemonAvenger6 小时前
MySQL基础入门:安装配置与基本操作指南
mysql·性能优化·架构
小王子10247 小时前
Django模型迁移指南:从命令用法到最佳实践
数据库·mysql·django·迁移回滚