MySQL 常用脚本

information_schema 
CHARACTER_SETS可用字符集 
COLLATIONS字符集的排序规则 
COLLATION_CHARACTER_SET_APPLICABILITY字符集和排序规则的可设置信息SHOW COLLATION;
COLUMNS数据库中所有列及属性 
COLUMN_PRIVILEGES数据库中所有列DML权限 
ENGINES存储引擎描述 
EVENTS调度事件 
FILES  
GLOBAL_STATUS服务器状态变量SHOW GLOBAL STATUS;
GLOBAL_VARIABLES服务器状态变量SHOW GLOBAL VARIABLES;
KEY_COLUMN_USAGE有约束的键列 
PARAMETERS存储过程和函数的参数或返回值 
PARTITIONS分区表分区信息 
PLUGINS服务器插件 
PROCESSLIST当前正在运行的线程 
PROFILING跟踪信息SHOW PROFILES;
SHOW PROFILE;
REFERENTIAL_CONSTRAINTS外键约束 
ROUTINES存储过程或函数信息 
SCHEMATA数据库部分信息 
SCHEMA_PRIVILEGES方案(数据库)权限 
SESSION_STATUS会话状态变量SHOW SESSION STATUS;
SESSION_VARIABLES会话状态变量SHOW SESSION VARIABLES;
STATISTICS索引信息SHOW INDEX FROM mysql.db;
SHOW INDEX FROM mysql;
TABLES表信息SHOW TABLES FROM mysql;
SHOW TABLES LIKE 'user';
TABLESPACES表空间信息(非 InnoDB) 
TABLE_CONSTRAINTS表约束信息 
TABLE_PRIVILEGES表权限信息 
TRIGGERS触发器信息 
USER_PRIVILEGES用户权限 
VIEWS视图信息 
INNODB_CMPINNODB 压缩信息 
INNODB_CMP_RESETINNODB 压缩信息 
INNODB_TRXINNODB 当前未提交的事务 
INNODB_CMPMEMINNODB 缓冲池中压缩信息 
INNODB_CMPMEM_RESETINNODB 缓冲池中压缩信息 
INNODB_LOCK_WAITSINNODB 锁等待信息 
INNODB_LOCKSINNODB 锁等待信息 

查看配置变量及运行状态变量:

#变量(全局)
mysqladmin -uroot -pmysql variables
mysql -uroot -pmysql -e "show global variables;"
select * from information_schema.global_variables;

#运行状态(全局)
mysqladmin -uroot -pmysql extended-status
mysql -uroot -pmysql -e "show global status;"
select * from information_schema.global_status;

#变量(会话)
mysql -uroot -pmysql -e "show session variables;"
select * from information_schema.session_variables;

#运行状态(会话)
mysql -uroot -pmysql -e "show session status;"
select * from information_schema.session_status;

#重置状态(会话等)
flush status;

 

-- 查看当前连接  
select * from information_schema.processlist;  

-- 查看当前正在被锁的事务(锁请求超时后则查不到)  
select * from information_schema.innodb_locks;  

-- 查看当前等待锁的事务(锁请求超时后则查不到)  
select * from information_schema.innodb_lock_waits; 

-- 查看当前未提交的事务(如果死锁等待超时,事务可能还没有关闭)Kill trx_mysql_thread_id
select * from information_schema.innodb_trx; 

-- 查看正在被访问的表  
show open tables where in_use > 0;

 

--查看数据库中所有外键  
select referenced_table_name,referenced_column_name,constraint_name,table_name,column_name
from information_schema.key_column_usage
where constraint_name <> 'PRIMARY';

SELECT CONSTRAINT_SCHEMA,TABLE_NAME,CONSTRAINT_NAME,REFERENCED_TABLE_NAME,UPDATE_RULE,DELETE_RULE
FROM information_schema.REFERENTIAL_CONSTRAINTS 
WHERE CONSTRAINT_SCHEMA='MYSQL';


 --查看数据库中表大小及行数
select table_name,table_rows
,round((data_length / 1024 / 1024), 3) "data_length_MB" 
,round((index_length / 1024 / 1024), 3) "index_length_MB" 
,create_time,engine,table_collation 
from information_schema.tables
where table_schema = 'MYSQL'
order by table_rows desc;

--碎片查询
select table_name,table_rows
,concat(round(DATA_FREE/1024/1024, 2), ' MB') as free_size
,concat(round(DATA_LENGTH/1024/1024, 2), ' MB') as size
,concat(DATA_FREE * 100/DATA_LENGTH,' %') as frag_percent
from information_schema.TABLES
where table_schema='MYSQL' and TABLE_TYPE='BASE TABLE'
order by DATA_LENGTH desc ;

 

--各表索引字段
SELECT TABLE_NAME,INDEX_NAME,NON_UNIQUE,NULLABLE,INDEX_TYPE,GROUP_CONCAT(COLUMN_NAME)
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = 'mysql' and TABLE_NAME='user'
GROUP BY TABLE_NAME,INDEX_NAME,NON_UNIQUE,NULLABLE,INDEX_TYPE;

 

--存储引擎
show engines;
show variables like '%storage_engine%';
show create table <table_name>;
show table status from <db_name> where name='<table_name>';

--数据库字符集&排序规则
select * from information_schema.schemata;

--查看表存储引擎&字符集
select TABLE_SCHEMA,ENGINE,VERSION,ROW_FORMAT,TABLE_COLLATION,CREATE_TIME 
from information_schema.tables where table_schema='mysql';

 

--查看存储过程/函数/触发器/视图 定义 
select name from mysql.proc where type='PROCEDURE';
select name from mysql.proc where type='FUNCTION';
select * from information_schema.triggers where trigger_name='';
select * from information_schema.views where table_name='';
select * from information_schema.tables where table_name='';

show create procedure proc_name;
show create function func_name;
show create view view_name;

 

-- 导出 MySQL 授权脚本(pt-show-grants)
mysql -B -N -uroot -pmysql -e \
"SELECT CONCAT('\'',user,'\'@\'',host,'\'') FROM mysql.user"  2>&1 \
| grep -v "Using a password" \
| while read line; do mysql -B -N -uroot -pmysql -e "SHOW GRANTS FOR $line" 2>&1 \
| grep -v "Using a password" ; done \
| awk '{ print $0 ";" }'

 

================================================================================

分组排序编号:

--分组排序编号
SELECT @rownum := @rownum + 1 AS rank,t.*
FROM mysql.user t, (SELECT @rownum := 0) r;

--分组排序编号
SELECT
 @row_num := IF(@prev_value=concat_ws('',t.table_schema),@row_num+1,1) AS RowNumber
,@prev_value := concat_ws('',t.table_schema )
,t.table_schema,t.table_name
FROM information_schema.`TABLES` t,(SELECT @row_num := 1) x,(SELECT @prev_value := '') y
ORDER BY t.table_schema;

"Merge into" 方法: 表中必须有主键或唯一键(默认以主键/唯一键关联两个表)

-- 表中必须有主键或唯一键(默认以tablea 的主键/唯一键关联两个表判断)
insert into tablea(id,name,addr,createtime) -- 如:id 为主键,默认A、B表以id关联判断
select uid,name,addr,createtime 
from tableb b -- B表给个别名方便
on duplicate key update -- 若插入重复则不插入,而是更新A表,更新字段如下
 name = b.name
,addr = b.addr
,code = b.usercode
,status = 1;

mysql 同列字符相加:

create table test(id int,name varchar(10));

insert into test value(1,'aa'),(1,'bb'),(1,'aa'),(2,'bb'),(2,'dd'),(3,'gg'),(3,null);

select * from test

SELECT id, GROUP_CONCAT(name SEPARATOR ', ') usernames FROM test GROUP BY id;

SELECT DISTINCT T0.id, (SELECT GROUP_CONCAT(DISTINCT name SEPARATOR ', ') FROM test T1 WHERE T1.id = T0.id) AS 'nameAll' 
FROM test T0;

游标:

DROP PROCEDURE  IF EXISTS proc_test;
delimiter //
CREATE PROCEDURE proc_test()
BEGIN
	declare flag boolean default true;
	declare v_id int;
	declare cur cursor for select id from tablename ;
	declare continue handler for not found set flag=false;
	open cur;
	fetch cur into v_id;
	while flag do
		select v_id;
		fetch cur into v_id;
	        -- commit;
	end while;
	close cur;
END //
delimiter ;

动态SQL执行:单独一个存储过程更方便

CREATE PROCEDURE sp_execsql( p_sql varchar(5000))
BEGIN
  SET @tquery = p_sql;
  PREPARE stmt FROM @tquery;
  EXECUTE stmt;
  DEALLOCATE PREPARE stmt;
END

存储过程事务控制:

CREATE PROCEDURE sp_test()
BEGIN
	declare p_mk int default 0;
	declare continue handler for sqlexception set p_mk=1;

	START TRANSACTION;
  -- sql statement

	IF p_mk = 1 THEN
		ROLLBACK; 
	ELSE 
		COMMIT; 
	END IF;
END

逗号分隔的列转为多行

# 逗号分隔的列转为多行
-- drop temporary table tmp; 
create temporary table tmp(id int,cols varchar(30));
insert into tmp values(1,'a,b,c'),(2,'e,j'),(3,'a,e,d'),(4,'b,b,c');

select distinct id,cols,substring_index(substring_index(a.`cols`,',',b.help_topic_id+1),',',-1) as new_cols
from tmp a join mysql.help_topic b on b.help_topic_id < (length(a.`cols`) - length(replace(a.`cols`,',',''))+1);

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值