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

बैश से MySQL संबंधित तालिकाओं का बल्क इंसर्ट

आपके प्रश्न में विभिन्न परस्पर विरोधी आवश्यकताएं व्यक्त की गई हैं। यह उत्तर इसके "लॉक रखें" पहलू पर केंद्रित है।

पूरे ऑपरेशन के लिए टेबल लॉक बनाए रखने के लिए, आपको एसक्यूएल सर्वर से एक ही कनेक्शन बनाए रखना होगा। एक तरीका यह होगा कि mysql कमांड लाइन क्लाइंट के सिंगल इनवोकेशन के लिए मल्टी-लाइन मल्टी-कमांड इनपुट के रूप में सब कुछ पास किया जाए। मूल रूप से इस तरह:

{ echo "LOCK TABLES Table1 WRITE"
  for i in "${infiles[@]}"; do
    echo "LOAD DATA LOCAL INFILE '${i}'"
  done
} | mysql

यह तब तक काम करेगा जब तक आप डेटाबेस से प्रश्न पूछे बिना सभी आवश्यक विवरण उत्पन्न कर सकते हैं (जैसे अधिकतम पहचानकर्ता) जबकि ताला रखा जाता है।

रीड ऑपरेशंस को मिक्स करने के लिए (जैसे कि मैक्सिमम वैल्यू के लिए पूछना) और ऑपरेशंस लिखना (जैसे कुछ फाइलों की सामग्री लोड करना), आपको सर्वर के साथ एक द्विदिश संचार की आवश्यकता होगी। इसे बैश के माध्यम से हासिल करना बहुत मुश्किल है, इसलिए मैं इसके खिलाफ सलाह दूंगा। यहां तक ​​​​कि अगर आपको प्रश्न पूछने की आवश्यकता नहीं है, तो बैश पाइप द्वारा प्रदान किया गया यूनिडायरेक्शनल कनेक्शन खतरे का एक स्रोत है:यदि mysql की ओर से कुछ भी गलत होता है, तो बैश नोटिस नहीं करेगा और वैसे भी अगला कमांड जारी करेगा। आप असंगत डेटा कर सकते हैं।

इन कारणों से, मैं कुछ स्क्रिप्टिंग भाषा का सुझाव दूंगा जिसके लिए MySQL बाइंडिंग उपलब्ध हैं, जैसे पर्ल या पायहोन विकल्पों का आपने उल्लेख किया है। उन भाषाओं में सीवीएस फाइलें पढ़ना आसान है, इसलिए आप एक ही स्क्रिप्ट में निम्नलिखित सभी काम कर सकते हैं:

  1. टेबल लॉक करें
  2. लेनदेन शुरू करें
  3. इनपुट csv फ़ाइलें पढ़ें
  4. अधिकतम आईडी जैसे प्रश्न पूछें
  5. टेबल लेआउट से मिलान करने के लिए इनपुट डेटा समायोजित करें
  6. तालिकाओं में डेटा डालें
  7. यदि कोई त्रुटि नहीं हुई, तो लेन-देन करें



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL फुलटेक्स्ट सर्च में उपयोग के लिए एस्केप स्ट्रिंग

  2. सप्ताह/महीनों के अंतराल पर तिथि सीमा के अनुसार समूह करें

  3. कुशलता से 7.300.000.000 पंक्तियों का भंडारण

  4. ड्रॉपडाउन को पॉप्युलेट करने के लिए PHP और MySQL का उपयोग करना

  5. ORDER BY क्लॉज में कस्टम ऑर्डर कैसे परिभाषित करें?