当前位置: 首页 > 科技观察

常用SQL语句分享

时间:2023-03-22 11:46:08 科技观察

前言:在日常的工作或者学习过程中,我们可能会经常用到一些SQL。建议大家把这些常用的SQL整理记录下来,这样以后使用起来会更方便。在工作和学习的过程中,笔者也整理了常用的SQL,现分享给大家!可能有些SQL你不经常用到,但还是希望能帮到你,说不定哪天你需要的时候可以用到。注:下面分享的SQL适用于MySQL5.7版本,低版本可能略有不同。某些SQL可能需要更高的权限才能执行。1.显示相关语句#查看实例参数如:showvariableslike'%innodb%';showglobalvariableslike'%innodb%';#查看实例状态,例如:showstatuslike'uptime%';showglobalstatuslike'connection%';#查看数据库链接:showprocesslist;showfullprocesslist;#查询表的结构:showcreatetabletb_name;#查询表的详细字段信息:showfullcolumnsfromtb_name;#查询表的所有索引信息:showindexfromtb_name;#查询库中cd开头的表:showtableslike'cd%';#查询一个库中的所有视图:showtablestatuswherecomment='view';#查询一个用户的权限:showgrantsfor'test_user'@'%';2.查看账户相关信息#这里首先介绍CONCAT函数:在MySQL中,CONCAT()函数用于将多个字符串拼接成一个字符串。利用这个功能,我们可以拼接出一步获取不到的sql。这个函数在语句的后半部分很有用。#拼接字符串中出现''时,需要使用\转义符#查看所有用户名:SELECTDISTINCTCONCAT('User:\'',user,'\'@\'',host,'\';')ASQUERYFROMmysql.user;#查看用户详情:SELECTuser,host,authentication_string,password_expired,password_lifetime,password_last_changed,account_lockedFROMmysql.user;3.KILLdatabaselink#下面的SQL列表只是拼接出killlink的语句,如果想要执行,直接复制结果执行即可。#杀死空闲时间大于2000s的链接:SELECTconcat('KILL',id,';')FROMinformation_schema.`PROCESSLIST`WHERECommand='Sleep'ANDTIME>2000;#杀死某个状态的链接:SELECTconcat('KILL',id,';')FROMinformation_schema.`PROCESSLIST`WHERESTATELIKE'Creatingsortindex';#杀死一个用户的链接:SELECTconcat('KILL',id,';')FROMinformation_schema.`PROCESSLIST`WHEREwhereuser='root';4.拼接创建数据库或用户语句#拼接创建数据库语句(不包括系统库):SELECTCONCAT('createdatabase','`',SCHEMA_NAME,'`','DEFAULTCHARACTERSET',DEFAULT_CHARACTER_SET_NAME,';')ASCreateDatabaseQueryFROMinformation_schema.SCHEMATAWHERESCHEMA_NAMENOTIN('information_schema','performance_schema','mysql','sys');#拼接创建用户语句(不包括系统用户):SELECTCONCAT('createuser\'',user,'\'@\'',Host,'\'''IDENTIFIEDBYPASSWORD\'',authentication_string,'\';')ASCreateUserQueryFROMmysql.`user`WHERE`User`NOTIN('root','mysql.session','mysql.sys');#在其他实例执行中有密码字符串可以直接创建一个与本实例密码相同的用户。5.查看库或表大小#查看整个实例空间的大小:SELECTconcat(round(sum(data_length/1024/1024),2),'MB')ASdata_length_MB,concat(round(sum(index_length/1024/1024),2),'MB')ASindex_length_MBFROMinformation_schema.`TABLES`;#查看每个库的大小:SELECTTABLE_SCHEMA,concat(TRUNCATE(sum(data_length)/1024/1024,2),'MB')ASdata_size,concat(TRUNCATE(sum(index_length)/1024/1024,2),'MB')ASindex_sizeFROMinformation_schema.`TABLES`GROUPBYTABLE_SCHEMA;#查看单个库占用的空间:SELECTconcat(round(sum(data_length/1024/1024),2),'MB')ASdata_length_MB,concat(round(sum(index_length/1024/1024),2),'MB')ASindex_length_MBFROMinformation_schema.`TABLES`WHEREtable_schema='test_db';#查看单表占用空间:SELECTconcat(round(sum(data_length/1024/1024),2),'MB')ASdata_length_MB,concat(round(sum(index_length/1024/1024),2),'MB')ASindex_length_MBFROMinformation_schema.`TABLES`WHEREtable_schema='test_db'ANDtable_name='tbname';6.查看表分片和缩表语句#查看一个库下所有表的分片情况:SELECTt.TABLE_SCHEMA,t.TABLE_NAME,t.TABLE_ROWS,concat(round(t.DATA_LENGTH/1024/1024,2),'M')Assize,t.INDEX_LENGTH,concat(round(t.DATA_FREE/1024/1024,2),'M')ASdatafreeFROMinformation_schema.`TABLES`tWHEREt.TABLE_SCHEMA='test_db'ORDERBYdatafreeDESC;#缩表,减少碎片:altertabletb_nameengine=innodb;optimizetabletb_name;7.查找无主键表#查找某一个库无主键表:SELECTtable_schema,table_nameFROMinformation_schema.`TABLES`WHEREtable_schema='test_db'ANDTABLE_NAMENOTIN(SELECTtable_nameFROMinformation_schema.table_constraintstJOINinformation_schema.key_column_usagekUSING(constraint_name,table_schema,table_name)WHEREt.constraint_type='PRIMARYKEY'ANDt.table_schema='test_db');#查找除系统库外没有主键的表:SELECTt1.table_schema,t1.table_nameFROMinformation_schema.`TABLES`t1LEFTOUTERJOINinformation_schema.TABLE_CONSTRAINTSt2ONt1.table_schema=t2.TABLE_SCHEMANANDt1.table_name=INSTRAYANDT2.TABLE_NAMET(')WHEREt2.table_nameISNULLANDt1.CHEMANOTTABLE'information,'performance_schema','mysql','sys');总结:希望这些SQL语句能对你有所帮助,收藏起来,说不定还会用到一次呢!

最新推荐
猜你喜欢