Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL:एक ही क्वेरी में सभी तालिका पंक्ति-गणना को सारांशित करें

यहां पहला उदाहरण कोड एक संग्रहित प्रक्रिया है जो पूरी प्रक्रिया को एक चरण में निष्पादित करती है, जहां तक ​​उपयोगकर्ता का संबंध है।

BEGIN

# zgwp_tables_rowcounts
# TableName RowCount
# Outputs a result set listing all tables and their row counts 
# for the current database

SET SESSION group_concat_max_len = 1000000;

SET @sql = NULL;
SET @dbname = DATABASE();

SELECT
  GROUP_CONCAT( 
    CONCAT (
      'SELECT ''',table_name,''' as TableName, COUNT(*) as RowCount FROM ', 
       table_name, ' '
    ) 
    SEPARATOR 'UNION '  
  ) AS Qry
FROM
  information_schema.`TABLES` AS t
WHERE
  t.TABLE_SCHEMA = @dbname AND
  t.TABLE_TYPE = "BASE TABLE"
ORDER BY
  t.TABLE_NAME ASC

INTO @sql
;

PREPARE stmt FROM @sql;

EXECUTE stmt;

END

नोट:

  • SELECT..INTO @sql आवश्यक क्वेरी बनाता है, और PREPARE... EXECUTE इसे चलाता है।

  • GROUP_CONCAT से एक लंबी पर्याप्त परिणाम स्ट्रिंग की अनुमति देने के लिए group_concat_max_len चर सेट करता है।

उपरोक्त प्रक्रिया एक व्यवस्थापक वातावरण जैसे कि Navicat, या कमांड लाइन पर त्वरित रूप से देखने के लिए उपयोगी है। हालांकि, परिणाम सेट लौटने के बावजूद, जहां तक ​​​​मुझे पता है कि इसे किसी अन्य दृश्य या क्वेरी में संदर्भित नहीं किया जा सकता है, संभवतः क्योंकि MySQL यह निर्धारित करने में असमर्थ है, इसे चलाने से पहले, यह कौन सा परिणाम सेट करता है, अकेले उनके पास कौन से कॉलम हैं ।

इसलिए, मैन्युअल संपादन के बिना, एक अलग SELECT...UNION स्टेटमेंट को जल्दी से तैयार करने में सक्षम होना अभी भी उपयोगी है जिसे एक दृश्य के रूप में उपयोग किया जा सकता है। यह उपयोगी है यदि आप किसी अन्य तालिका से किसी अन्य प्रति-तालिका जानकारी के लिए पंक्ति गणना में शामिल होना चाहते हैं। इसके साथ एक और संग्रहित प्रक्रिया:

BEGIN

# zgwp_tables_rowcounts_view_statement
# Output: SelectStatement
# Outputs a single row and column, containing a (possibly lengthy)
# SELECT...UNION statement that, if used as a View, will output
# TableName RowCount for all tables in the current database.

SET SESSION group_concat_max_len = 1000000;
SET @dbname = DATABASE();

SELECT
  GROUP_CONCAT( 
    CONCAT (
      'SELECT ''',table_name,''' as TableName, COUNT(*) as RowCount FROM ', 
      table_name, ' ', CHAR(10)) 
    SEPARATOR 'UNION '  
  ) AS SelectStatement
FROM
  information_schema.`TABLES` AS t
WHERE
  t.TABLE_SCHEMA = @dbname AND
  t.TABLE_TYPE = "BASE TABLE"
ORDER BY
  t.TABLE_NAME ASC
;
END

नोट्स

  • अवधारणा में पहली प्रक्रिया के समान ही। मैंने कथन को देखने या संपादित करने में सुविधा के लिए प्रत्येक सहायक "SELECT...UNION" कथन में एक लाइनब्रेक (CHAR(10)) जोड़ा है।

  • आप इसे एक फ़ंक्शन के रूप में बना सकते हैं और SelectStatement वापस कर सकते हैं, यदि यह आपके पर्यावरण के लिए अधिक सुविधाजनक है।

आशा है कि यह मदद करता है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. वर्डप्रेस मेटा_क्वेरी को अनुकूलित करने में मदद चाहिए

  2. जावा jdbc mysql कनेक्टर:लंबे निष्क्रिय समय के बाद वियोग को कैसे हल करें

  3. दिनांक को yyyy-mm-dd से dd माह_नाम वर्ष में बदलें

  4. कई तालिकाओं में mySQL मैच

  5. JSON_REPLACE () - MySQL में JSON दस्तावेज़ में मान बदलें