1.NOT EXISTS 和 NOT IN
SELECT COUNT(ca.aaa)
FROM xx ca
WHERE NOT EXISTS(
SELECT label.*
FROM xxx label
WHERE label.aaa = ca.aaa
)
 
SELECT COUNT(ca.aaa)
FROM xx ca
WHERE ca.aaa NOT IN(
SELECT label.aaa
FROM xxx label
WHERE label.aaa = ca.aaa
)
 
2.查询表结构
-- 查询指定表的字段结构
select (@i:=@i+1) i,COLUMN_NAME,COLUMN_TYPE,IS_NULLABLE,COLUMN_COMMENT
from information_schema.columns,(SELECT @i:=0) as i where table_schema = 'xxx' #表所在数据库
and table_name = 'xxx' ; #你要查的表
 
-- 查询所有表结构
select table_name,COLUMN_NAME,COLUMN_TYPE,IS_NULLABLE,COLUMN_COMMENT,IF(columns.COLUMN_KEY='PRI','是',NULL) AS IS_KEY
from information_schema.columns columns where table_schema = 'xxx'; #表所在数据库
 
-- 查询所有表名
show tables;
 
-- 查询所有表名和记录总数
SELECT TABLE_NAME,TABLE_COMMENT,TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='xxx';
 
-- 查询有url字段的表
SELECT table_name, (@i:=@i+1) i,COLUMN_NAME,COLUMN_TYPE,IS_NULLABLE,COLUMN_COMMENT
FROM information_schema.columns,(SELECT @i:=0) as i
WHERE table_schema = 'xxx'
AND (COLUMN_NAME LIKE '%url%' OR COLUMN_NAME LIKE '%path%' OR COLUMN_NAME LIKE '%file%');
 
3.按照指定字段分组,有着重复字段的多条记录中,取修改时间最新的那条记录
SELECT ca.*
FROM (select aaa, MAX(change_time) as change_time from xxx group by aaa) AS temp
LEFT JOIN xxx ca ON temp.aaa = ca.aaa AND temp.change_time = ca.change_time
 
4.数据库锁、线程
(1)数据库锁等待超时
java中报错:java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction
先查看当前库的所有线程
show full processlist;
 
然后查看innodb(存储引擎)的事务表innodb_trx,看下里面是否有正在锁定的事务线程
select * from information_schema.innodb_trx;
有一个正在锁定的事务线程 trx_state:RUNNING trx_mysql_thread_id:527491,
看看ID是否在show full processlist里面的sleep线程中:
如果是,就证明这个sleep的线程事务一直没有commit或者rollback被卡住了,我们需要手动kill掉。
 
最后杀掉该线程
kill 527491;
 
information_schema数据库 INNODB_LOCKS、INNODB_TRX
SHOW VARIABLES LIKE 'innodb_lock_wait_timeout'
 
(2)死锁:
Deadlock found when trying to get lock; try restarting transaction
找到引起死锁的语句,然后针对语句进行优化
show engine innodb status;
 
5.IF函数
SELECT IF(lo.aaa=1,lo.bbb*12,lo.bbb) as rate
 
WHERE IF(ld.aaa!=0, lo.`bbb`=10, ld.ccc=0)
 
6.排序
-- DESC 降序时候默认null值排在后面、ASC升序时默认null值排在前面,可使用 IS NULL处理
null值放在最后
ORDER BY sort_num is null, sort_num
 
7.存放数字的字符串字段排序
SELECT data_value
FROM xxx
ORDER BY data_value + 0 DESC;
 
SELECT aaa
FROM xxx
GROUP BY aaa
ORDER BY STR_TO_DATE(aaa, '%Y年%m月') DESC;
 
8.FIELD函数
对查询结果集进行指定顺序排序
ORDER BY field(p.aaa, 'ccc','bbb')
 
9.FIND_IN_SET函数
查询 某元素 是否存在于 集合类型的字符串
SELECT *
FROM xxx
WHERE FIND_IN_SET('auditJob', job) -- auditJob存放值:job,test
 
10.case...when
CASE [col_name]
WHEN [value1] THEN [result1]
WHEN [value1] THEN [result1]
ELSE [default]
END
 
SELECT aaa as 测试,
CASE bbb
WHEN 0 THEN '开发'
WHEN 1 THEN '产品'
ELSE '项目'
END as 运维,
 
11.查询结果集的序号
SELECT (@i:=@i+1) as 序号
FROM xxx, (select @i:=0) t
 
12.distinct
去重的统计
SELECT count(DISTINCT(aaa))
from xxx
WHERE `status`=1
 
13.REPLACE函数
url去掉第一个字符,并把/改成_
UPDATE xxx
SET aaa = REPLACE(SUBSTRING(aaa,2), '/', '_')
 
UPDATE xxx
SET aaa = REPLACE(aaa,'.png','-short.png');
 
14.GROUP_CONCAT()函数
分组后数据值的拼接(多个用,隔开,也可以指定分隔符)
SELECT GROUP_CONCAT(bbb)
FROM xxx
GROUP BY aaa
 
15.TRUNCATE TABLE
truncate删除整表数据(或navicat工具中:右击-截断表)
与delete不同的是:
删除后将重新水平线和索引(id从零开始)
 
16.设置数据包的大小
数据库对大量数据插入或者更新有限制,可以自己设置
show global variables like 'max_allowed_packet';
set global max_allowed_packet=157286400;
 
mysql中,in语句中参数个数是不限制的,不过对整段sql语句的长度有了限制max_allowed_packet
 
17.upper(str)转大写、lower(str)转小写
 
18.字符串连接concat函数
 
19.MAX、MIN函数
查询最大id,用MAX(id)
查询最小id,用MIN(id)
 
20.删除或更新的表和条件用的表如果一样
则条件表需起别名,删除表不能有别名
 
delete from xxx where id in(
select u.id from xxx as u where u.status = 1
)
 
UPDATE xxx SET mobile = '110'
WHERE id in(
SELECT temp.id
FROM (
SELECT u.id
FROM xxx AS u
where u.status = 1
) AS temp
);
 
更新 SET 自己表
UPDATE xxx t1
INNER JOIN (select * from xxx as t where t.grant_num = 1) t2
ON t1.ccc = t2.ccc
SET t1.aaa = t2.bbb;
 
21.COUNT函数
SELECT COUNT(vo.id)
FROM(
SELECT ca.id
FROM xxx ca
LEFT JOIN xx ld ON ld.user_id = ca.user_id
WHERE ca.status=1 AND ld.id is NULL
GROUP BY ca.aaa
) vo
 
22.insert into select from
INSERT INTO `xxx`(`aaa`, `bbb`)
SELECT 1, '测试'
FROM `xx`
WHERE status= 0
LIMIT 1;
 
23.查询重复数据
SELECT GROUP_CONCAT(id), GROUP_CONCAT(mobile)
FROM xxx
GROUP BY mobile HAVING count(mobile)>1;
 
24.时间查询
近三年: date(sentiment_time) BETWEEN CURDATE() - INTERVAL 3 YEAR AND CURDATE()
近一年: date(sentiment_time) BETWEEN DATE_SUB(CURDATE(), INTERVAL 1 YEAR) AND CURDATE()
近一周: date(sentiment_time) BETWEEN DATE_SUB(CURDATE(),INTERVAL 7 DAY) AND CURDATE()
近三天: date(sentiment_time) BETWEEN CURDATE() - INTERVAL 3 DAY AND CURDATE()
今日: date(sentiment_time) = CURDATE()
 
25.with as
 
26.联合查询
union 的查询结果不会有重复项,因为它的内部使用了一次 distinct,
而 union all 的查询结果包含重复项。
 
SELECT 'all' `bankTypeName`, COUNT(*) total
FROM xxx a
WHERE a.platform = 'xxx'
UNION ALL
SELECT 'bank' `bankTypeName`, COUNT(*) total
FROM xxx a
WHERE a.platform = 'xxx'
AND b.valid=1
注意:参与联合查询的各查询结果的列数必须相同,对应项的数据类型也必须相同
 
同时查询多张没有关联的表数据
(SELECT UNIT_TYPE, UNICODE,"NAME",'xxx' AS label from xxx)
union all
(SELECT UNIT_TYPE, UNICODE,"NAME",'xxx' AS label from xxx)
union all
(SELECT UNIT_TYPE, UNICODE,"NAME",'xxx' AS label from xxx)
 
列:相同数量、相似的数据类型、顺序相同。返回第一个select的列名
 
 27.评论区
 

翻译

搜索

复制

mysql语句大全-工作中常用整理(欢迎大家在评论区继续补充)的更多相关文章

  1. 收集一些工作中常用的经典SQL语句

    作为一枚程序员来说和数据库打交道是不可避免的,现收集一下工作中常用的SQL语句,希望能给大家带来一些帮助,当然不全面,欢迎补充! 1.执行插入语句,获取自动生成的递增的ID值 INSERT INTO ...

  2. 【 PostgreSQL】工作中常用SQL语句干货

    接触gp数据库近一年的时间,语法上和其他数据库还是有些许不同,工作中常用的操作语句分享给大家! -- 建表语句 create table ods.ods_b_bill_m ( acct_month t ...

  3. 工作中常用的QTP操作Excel函数

    前言 本文只是对工作中常用的EOM相关函数的整理,并不是要写个大而全的操作手册,如果想对EOM有更多的了解可以参考QTP的帮助文档或查看QTP安装目录\CodeSamplesPlus\UsingExc ...

  4. [转帖]MySQL语句大全

    MySQL语句大全 https://www.cnblogs.com/jicki/p/5548676.html 一.连接mysql. 格式: mysql -h主机地址 -u用户名 -p用户密码 二.修改 ...

  5. 工作中常用到的Java集合类有哪些?

    前言 只有光头才能变强. 文本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y Java集合是我认为在Java基础中最最重要的知 ...

  6. 工作中常用的js、jquery自定义扩展函数代码片段

    仅记录一些我工作中常用的自定义js函数. 1.获取URL请求参数 //根据URL获取Id function GetQueryString(name) { var reg = new RegExp(&q ...

  7. 工作中常用的Linux命令:mkdir命令

    本文链接:http://www.cnblogs.com/MartinChentf/p/6076075.html (转载请注明出处) 在Linux系统中,mkdir命令用来创建一个目录或一个级联目录. ...

  8. 工作中常用的Linux命令:crontab命令

    本文链接:http://www.cnblogs.com/MartinChentf/p/6060252.html (转载请注明出处) crontab是一个用来设置.删除或显示供守护进程cron执行的定时 ...

  9. 工作中常用的Linux命令:ipcs/ipcrm命令

    本文链接:http://www.cnblogs.com/MartinChentf/p/6057100.html (转载请注明出处) ipcs 1. 命令格式 ipcs [resource-option ...

  10. 工作中常用的Linux命令:find命令

    本文链接:http://www.cnblogs.com/MartinChentf/p/6056571.html (转载请注明出处) 1.命令格式 find [-H] [-L] [-P] [-D deb ...

随机推荐

  1. C#开源的两款功能强大的录屏神器

    ScreenToGif ScreenToGif是一款由C#语言开发且开源的操作简单.免费的屏幕录制和GIF动画制作神器.它可以帮助用户捕捉计算机屏幕上的实时动画,并将其保存为高质量的 GIF 图像格式 ...

  2. 羽夏壳世界—— PE 结构(下)

    写在前面   此系列是本人一个字一个字码出来的,包括代码实现和效果截图. 如有好的建议,欢迎反馈.码字不易,如果本篇文章有帮助你的,如有闲钱,可以打赏支持我的创作.如想转载,请把我的转载信息附在文章后 ...

  3. 🔥🔥🔥httpsok-v1.8.0 SSL证书自动续签就应该这么简单

    httpsok-v1.8.0 SSL证书自动续签就应该这么简单 简介 一行命令,一分钟轻松搞定SSL证书自动续期 httpsok 是一个便捷的 HTTPS 证书自动续签工具,专为 Nginx 服务器设 ...

  4. C#.Net筑基-运算符🔣Family

    C#运算符 内置了丰富的运算符操作类型,使用方便,极大的简化了编码,同时还支持多种运算符重载机制,让自定义的类型也能支持运算符行为. 01.运算符概览 运算符分类 描述 数学运算 基础的加减乘除,及+ ...

  5. P2421-荒岛野人Savage题解

    好久没写题解了啊 洛谷P2421 荒岛野人 题目大意:有一个有很多洞的岛上,住了\(n\)个野人,每个野人的初始位置为\(c[i]\),换洞的速度为\(p[i]\),寿命为\(l[i]\).要求求出洞 ...

  6. C语言:++ --优先级的深入理解

    #include <stdio.h> int main() { int num = 11; int result = ++num > 11 && --num < ...

  7. Expander展开收缩动画

    这个问题困扰了我一天,最后下了个MaterialDesign的demo,看了下他的源码,才恍然大悟,原来很简单. 我原来的设想是在expander的ControlTemplate设置触发器,在IsEx ...

  8. go高并发之路——go语言如何解决并发问题

    一.选择GO的原因 作为一个后端开发,日常工作中接触最多的两门语言就是PHP和GO了.无可否认,PHP确实是最好的语言(手动狗头哈哈),写起来真的很舒爽,没有任何心智负担,字符串和整型压根就不用区分, ...

  9. 13年过去了,Spring官方竟然真的支持Bean的异步初始化了!

    你好呀,我是歪歪. 两年前我曾经发布过这样的一篇文章<我是真没想到,这个面试题居然从11年前就开始讨论了,而官方今年才表态.> 文章主要就是由这个面试题引起: Spring 在启动期间会做 ...

  10. MySQL 字段截取拼接

    @ 目录 前言 需求: 拼接函数: 截取函数: 总结 前言 请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i. 提示:以下是本篇文章正文内容,下面案例可供参考 需求: 将数据库中的某一个字段的 ...