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

मैं एक MySQL डेटाबेस से सभी तालिकाओं को कैसे छोटा कर सकता हूं?

ठीक है, मैंने इसे स्वयं हल किया है यहाँ संग्रहीत कार्यविधि है :)

BEGIN
    DECLARE done BOOLEAN DEFAULT FALSE; 
    DECLARE truncatestmnt TEXT; -- this is where the truncate statement will be retrieved from cursor

    -- This is the magic query that will bring all the table names from the database
    DECLARE c1 CURSOR FOR SELECT Concat('TRUNCATE TABLE ', TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE INFORMATION_SCHEMA.TABLES.TABLE_SCHEMA = "@DatabaseName";
    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = TRUE; 

    OPEN c1;

    c1_loop: LOOP
    FETCH c1 INTO truncatestmnt;
    IF `done` THEN LEAVE c1_loop; END IF;
        SET @x = truncatestmnt;
        PREPARE stm1 FROM @x;
        EXECUTE stm1;
    END LOOP c1_loop; 

    CLOSE c1;
END

मैं दिए गए डेटाबेस से सभी तालिकाओं को कॉल कर रहा हूं, इससे मदद मिलेगी यदि दिए गए डेटाबेस के अंदर की तालिकाओं का पालन करने के लिए कोई पैटर्न नहीं है।

तो INFORMATION_SCHEMA.TABLES जहां INFORMATION_SCHEMA.TABLES.TABLE_SCHEMA ="@DatabaseName"; से DECLARE c1 CURSOR FOR SELECT Concat('TRUNCATE TABLE', TABLE_NAME) को कॉल करके और परिणामों को एक कर्सर में सहेजना मैं सभी TRUNCATE TABLE x . प्राप्त कर सकता हूं दिए गए डेटाबेस के अंदर तालिकाओं की "n" मात्रा द्वारा उत्पन्न बयान, फिर कर्सर में प्रत्येक कथन को तैयार और निष्पादित करके यह दिए गए डेटाबेस के अंदर सभी तालिकाओं को छोटा कर देगा।

आशा है कि यह किसी और की भी मदद करता है :)

एलेक्स



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP कोड के भीतर से एक MySQL संग्रहीत प्रक्रिया को कैसे कॉल करें?

  2. तालिका 'mysql.user' मौजूद नहीं है:त्रुटि

  3. मैसकल रिकर्सिव का चयन करें सभी बच्चे को कई स्तरों के साथ प्राप्त करें

  4. एंड्रॉइड पर MySQL कनेक्टर/जे कैसे काम कर रहा है?

  5. WooCommerce उत्पाद "स्टॉक में नहीं" संदेश दिखा रहे हैं जब वास्तव में स्टॉक से बाहर नहीं है