主頁 > 資料庫 > 匯總資料庫資訊的存盤程序

匯總資料庫資訊的存盤程序

2022-01-25 06:47:30 資料庫

問題:

  mysql日常開發程序中,資料庫、表的很多資訊分散在不同的工具和不同的界面中,來回切換查找非常麻煩,

解決方式:

  基于這個問題,寫了一個存盤程序,將這些日常需要的資訊集合在一個存盤程序中,查詢起來非常方便,

       工具合集中寫了其他存盤程序的呼叫方式和說明,為的是方便解決其他問題,后續分享這些問題和解決方式,

 

  1 -- -- powered by wanglifeng https://www.cnblogs.com/wanglifeng717
  2 DROP PROCEDURE IF EXISTS show_db_info;
  3 
  4 DELIMITER %%
  5 CREATE PROCEDURE show_db_info() 
  6 label:BEGIN
  7 -- ############################################################################
  8 -- ############                    列印一個庫中每個表的各種資訊    ##############
  9 -- -- powered by wanglifeng https://www.cnblogs.com/wanglifeng717
 10 -- ############################################################################
 11 
 12 -- 設定庫名
 13 SET @dbname= DATABASE();
 14 
 15 
 16 DROP TABLE if exists fk_tbl;
 17 CREATE TABLE if NOT exists fk_tbl as
 18   SELECT 
 19     t.CONSTRAINT_TYPE AS 'fk',
 20     t.TABLE_NAME AS 'tbl_name',
 21     t.CONSTRAINT_NAME AS 'fk_name',
 22     k.COLUMN_NAME AS 'fk_col',
 23     CONCAT(
 24       '來自 ',
 25       k.REFERENCED_TABLE_NAME,
 26       ' 表 (',
 27       k.REFERENCED_COLUMN_NAME,
 28       ')'
 29     ) AS 'come_from' 
 30   FROM
 31     information_schema.TABLE_CONSTRAINTS t 
 32     JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE k 
 33       ON t.CONSTRAINT_NAME = k.CONSTRAINT_NAME 
 34       AND t.TABLE_NAME = k.TABLE_NAME 
 35       AND t.CONSTRAINT_SCHEMA = k.CONSTRAINT_SCHEMA 
 36   WHERE t.CONSTRAINT_TYPE = 'FOREIGN KEY' 
 37     AND t.table_schema = DATABASE() ;
 38  
 39  DROP TABLE if EXISTS index_tbl;
 40  CREATE  table if not exists index_tbl as
 41  SELECT 
 42     IF(
 43       non_unique = 0,
 44       '唯一鍵',
 45       '索引'
 46     ) AS 'index_type',
 47     TABLE_NAME AS 'tbl_name',
 48     index_name AS 'index_name',
 49     column_name  AS 'index_col',
 50     s.SEQ_IN_INDEX AS 'order',
 51     (SELECT GROUP_CONCAT(i.column_name ORDER BY i.seq_in_index) FROM  information_schema.statistics i WHERE  i.table_schema = DATABASE() and i.table_name=s.table_name AND i.index_name=s.index_name GROUP BY i.index_name) AS 'bind_col'
 52   FROM
 53     information_schema.statistics s
 54   WHERE table_schema = DATABASE();
 55   
 56 -- SELECT * FROM index_tbl;
 57  
 58  
 59  
 60 
 61 -- ########################################################################   
 62 --     列印表資訊
 63 -- ######################################################################## 
 64 
 65 SET @help_code='
 66 -- 表注釋:   @tbl_comment
 67 
 68 -- 欄位串列:@allColumnList
 69 
 70 call insert_code_generator("@in_var_tbl_name");
 71 
 72 call select_code_generator("@in_var_tbl_name","list|obj","static_query_col","dynamic_query_col","list_query_col");
 73 
 74 call update_code_generator("@in_var_tbl_name","update_col","dynamic_update_col","static_query_col","dynamic_query_col","list_query_col");
 75 
 76 call tbl_query("@in_var_tbl_name","*"," where 1=1 limit 50 ","32");
 77 
 78 call insert_sql_generator("@in_var_tbl_name","exclude_col_list");
 79 
 80 call delete_drop_sql_generator("WHERE \'2021-05-19 22:19:56.724\' <= LEFT(create_time,23) and LEFT(create_time,23)<=\'2021-05-19 22:19:56.728\'","include_tbl_list","exclude_tbl_list","0");
 81 /*
 82 方法使用幫助:
 83 -- -- powered by wanglifeng https://www.cnblogs.com/wanglifeng717
 84 insert代碼生成器用法: 
 85     insert_code_generator( in_var_tbl_name[要插入的表名] )
 86 
 87 select代碼生成器用法: 
 88      select_code_generator
 89     (      in_var_tbl_name     [要查詢的表] 
 90         ,in_var_return_type  [回傳型別,list|ojb]
 91         ,in_static_col_list  [靜態查詢條件,欄位串列,形如:"id,name,code"]
 92         ,in_dynamic_col_list [動態查詢條件,欄位串列,形如:"id,name,code"]
 93         ,in_list_col_list    [動態集合in查詢條件欄位串列,形如:"id,name,code"] 
 94     )
 95     
 96 update代碼生成器用法: 
 97     update_code_generator
 98     ( in_var_tbl_name                  [要查詢的表] 
 99      ,in_var_update_col_list           [要更新的欄位串列] 
100      ,in_var_dynamic_update_col_list   [要動態更新的欄位串列] 
101      ,in_static_col_list               [靜態查詢條件,欄位串列,形如:"id,name,code"]
102      ,in_dynamic_col_list              [動態查詢條件,欄位串列,形如:"id,name,code"]
103      ,in_list_col_list                 [動態集合in查詢條件欄位串列,形如:"id,name,code"] 
104     )
105     
106 高級查詢工具用法:
107     tbl_query
108     ( in_var       [要查詢的表] 
109      ,in_col       [需要查詢的欄位,*代表全部,可定制,形如:"id,name,code"] 
110      ,in_where     [where條件,支持limit]  
111      ,in_sub_limit [子查詢limit限制條數] )
112      
113 insert_sql生成器用法:
114     insert_sql_generator
115     ( tbl_name_list       [要生成insert-sql的表名串列:例如:"tbl_name1,tbl_name2,tbl_name3"] 
116       ,exclude_col_list   [不需要列印的欄位串列: 例如:"name,code,id"] )
117 
118 delete_drop_sql生成器用法:
119      delete_drop_sql_generator
120      (var_where             [where條件,例如:" where LEFT(CREATE_time,19)>\'2021-08-04\'"]
121      ,var_include_tbl_list  [要包含的表名串列,優先于var_exclude_tbl_list,例如:"tbl_name1,tbl_name2"]
122      ,var_exclude_tbl_list  [要排除的表名串列,僅在var_include_tbl_list為空時生效,例如:"tbl_name1,tbl_name2"]
123      ,var_greater_than_value[符合where條件要過濾的值,count(*)>=0 ]
124      )
125 */
126 
127 
128 ';
129 
130 -- 表名,注釋名  
131   SELECT 
132    (@row_id:=@row_id +1) AS '序號',
133     s.table_name AS '表名',
134     s.table_comment AS '注釋',
135     
136      /*
137      -- 格式化對齊輸出所有欄位的注釋
138      "欄位注釋:"{
139     "id"               : "物理主鍵(自增)",
140     "name"             : "物品名稱",
141     "description"      : "描述",
142     "status"           : "狀態(1有效,0無效,2初始狀態)",
143     "create_time"      : "創建時間",
144     "last_update_time" : "更新時間"}
145      */
146     (SELECT 
147             CONCAT_WS('','"欄位注釋:"{\r\n',
148                 GROUP_CONCAT(
149                     CONCAT_WS('',
150                       CONCAT_WS( '','"',t.COLUMN_NAME,'":')
151                         ,repeat(' ',
152                             (
153                                 (SELECT  MAX(length(CONCAT_WS( '','"',s.COLUMN_NAME,'"')))  FROM information_schema.columns s WHERE s.TABLE_SCHEMA= DATABASE() and s.TABLE_NAME=t.TABLE_NAME)  
154                                  - 
155                                 LENGTH(CONCAT_WS( '','"',t.COLUMN_NAME,'"'))
156                             )
157                         )
158                         /*第三列:注釋*/
159                         ,
160                             -- "tbl_cbm_user_info的uuid | varchar(64) | 非空 | 默認值: null | 字符編碼: utf8mb4 | 校驗編碼: utf8mb4_bin | 索引 | idx_ali_user_info_user_uuid(user_uuid)"
161                              CONCAT_WS('','"',t.column_comment,' | ',t.COLUMN_TYPE,' | ',if(t.is_nullable='YES','可空','非空'),case t.COLUMN_KEY when 'PRI' then ' | 主鍵'  else '' END
162                             ,CONCAT_WS('',' | 默認值: ',IFNULL(t.COLUMN_DEFAULT,'null'))
163                             ,CONCAT('',' | 字符編碼: ',t.CHARACTER_SET_NAME)
164                             ,CONCAT('',' | 校驗編碼: ',t.COLLATION_NAME)
165                             ,(
166                                 IFNULL(
167                                     (
168                                         SELECT 
169                                             GROUP_CONCAT( CONCAT(' | ',index_type,': ','(',bind_col,')')SEPARATOR '')
170                                         FROM index_tbl i WHERE i.tbl_name =t.TABLE_NAME  AND i.index_col =t.COLUMN_NAME  
171                                     )
172                                 ,' | 無索引')
173                             )
174                             ,    
175                             --  | 外鍵: fk_ali_user_info_user_uuid來自 tbl_cbm_user_info 表 (uuid)    
176                             (    
177                                 SELECT 
178                                 CONCAT(' | 外鍵: ',come_from)
179                                 FROM fk_tbl f WHERE f.tbl_name =t.TABLE_NAME AND f.fk_col=t.COLUMN_NAME
180                             )
181                             
182                             ,'"') 
183                          -- -----------------------------------------------------
184                     ) ORDER BY t.ORDINAL_POSITION SEPARATOR ',\r\n'
185                 ),'\r\n}'
186             ) 
187         FROM information_schema.columns t 
188         WHERE t.TABLE_SCHEMA = DATABASE() and t.TABLE_NAME=s.table_name
189     ) AS '欄位串列',
190      REPLACE(
191                    replace(
192                           REPLACE(@help_code,'@tbl_comment',s.TABLE_COMMENT) 
193                           ,'@in_var_tbl_name'
194                           ,s.TABLE_NAME
195                    )
196                 ,'@allColumnList'
197                 ,(SELECT GROUP_CONCAT(t.COLUMN_NAME) FROM information_schema.columns t WHERE  t.TABLE_SCHEMA= DATABASE() and t.TABLE_NAME=s.TABLE_NAME)
198                 ) AS '工具合集',
199     s.table_rows AS '記錄數',
200     TRUNCATE(s.data_length / 1024 / 1024, 2) AS '資料容量(MB)',
201     TRUNCATE(s.index_length / 1024 / 1024, 2) AS '索引容量(MB)',
202     s.create_time AS '創建時間' 
203   FROM
204     information_schema.tables s
205     JOIN (SELECT @row_id:=0) temp
206   WHERE s.table_schema = @dbname 
207     AND s.table_name NOT IN ('index_tbl','fk_tbl')
208     ORDER BY s.data_length DESC,s.index_length DESC ;
209  
210  
211   
212 -- ########################################################################   
213 -- 外鍵約束 
214 -- ######################################################################## 
215 
216    
217 SELECT 
218     (@row_id:=@row_id +1) AS '序號',
219     t.CONSTRAINT_TYPE AS '約束型別',
220     t.TABLE_NAME AS '表名',
221     t.CONSTRAINT_NAME AS '約束名',
222     k.COLUMN_NAME AS '相關列',
223     CONCAT('來自 ', k.REFERENCED_TABLE_NAME,  ' 表 (', k.REFERENCED_COLUMN_NAME, ')' ) AS '來自' 
224 FROM
225     information_schema.TABLE_CONSTRAINTS t 
226     JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE k 
227     JOIN (SELECT @row_id:=0) temp
228     ON t.CONSTRAINT_NAME = k.CONSTRAINT_NAME 
229     AND t.TABLE_NAME = k.TABLE_NAME 
230     AND t.CONSTRAINT_SCHEMA = k.CONSTRAINT_SCHEMA 
231 WHERE t.CONSTRAINT_TYPE = 'FOREIGN KEY' 
232 AND t.table_schema = @dbname AND t.table_name NOT IN ('index_tbl','fk_tbl');
233   
234   
235 -- ########################################################################    
236 -- 索引串列   
237 -- ########################################################################
238 
239 SELECT  
240     (@row_id:=@row_id +1) AS '序號',t.*
241 FROM 
242 ( 
243   SELECT 
244     IF(non_unique = 0,'unique','normal_index') AS '索引型別',
245     TABLE_NAME AS '表名',
246     index_name AS '索引名',
247     GROUP_CONCAT(column_name  ORDER BY seq_in_index) AS '相關列' 
248   FROM
249     information_schema.statistics 
250   WHERE table_schema = @dbname AND table_name IN  (SELECT table_name  FROM  information_schema.TABLES  WHERE TABLE_SCHEMA = @dbname) 
251   AND table_name NOT IN ('index_tbl','fk_tbl')
252   GROUP BY TABLE_NAME, INDEX_NAME 
253  ) t
254 JOIN (SELECT @row_id:=0) temp;
255     
256 
257 DROP TABLE if EXISTS index_tbl;
258 DROP TABLE if exists fk_tbl;
259 
260 
261 END %%
262 DELIMITER ;    
263 
264 CALL show_db_info();
show_db_info存盤程序

 

mysql資料庫運行結果如下:

 

 

 

 

 

 

 

 

 

 

 

 本文來自博客園,作者:wanglifeng,轉載請注明原文鏈接: https://www.cnblogs.com/wanglifeng717/p/15830527.html

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/420435.html

標籤:MySQL

上一篇:資料庫相關作業流程與工具

下一篇:insert陳述句生成的存盤程序

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:33:24 more
  • MySQL中binlog備份腳本分享

    關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......

    uj5u.com 2023-04-20 08:28:06 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:27:27 more
  • 快取與資料庫雙寫一致性幾種策略分析

    本文將對幾種快取與資料庫保證資料一致性的使用方式進行分析。為保證高并發性能,以下分析場景不考慮執行的原子性及加鎖等強一致性要求的場景,僅追求最終一致性。 ......

    uj5u.com 2023-04-20 08:26:48 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:26:35 more
  • 云時代,MySQL到ClickHouse資料同步產品對比推薦

    ClickHouse 在執行分析查詢時的速度優勢很好的彌補了MySQL的不足,但是對于很多開發者和DBA來說,如何將MySQL穩定、高效、簡單的同步到 ClickHouse 卻很困難。本文對比了 NineData、MaterializeMySQL(ClickHouse自帶)、Bifrost 三款產品... ......

    uj5u.com 2023-04-20 08:26:29 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:25:13 more
  • Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)

    Redis 報錯“OutOfDirectMemoryError(堆外記憶體溢位) ”問題如下: 一、報錯資訊: 使用 Redis 的業務介面 ,產生 OutOfDirectMemoryError(堆外記憶體溢位),如圖: 格式化后的報錯資訊: { "timestamp": "2023-04-17 22: ......

    uj5u.com 2023-04-20 08:24:54 more
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:24:03 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:23:11 more