आप PREPARE
का उपयोग नहीं कर सकते हैं चलाने के लिए LOAD DATA INFILE
.
उन कथनों की सूची जिन्हें आप PREPARE
. के साथ चला सकते हैं इस पृष्ठ में प्रलेखित हैं:https:/ /dev.mysql.com/doc/refman/5.7/hi/sql-syntax-prepared-statements.html
"तैयार विवरणों में अनुमत SQL सिंटैक्स" उपशीर्षक के तहत। ध्यान दें कि यह सूची MySQL के पुराने संस्करणों में भिन्न हो सकती है।
क्योंकि आप PREPARE
का उपयोग नहीं कर सकते हैं , आप एक वैरिएबल सेट करके और एक डायनामिक SQL स्टेटमेंट बनाकर वह तरीका नहीं कर सकते जिसका आप उपयोग कर रहे हैं।
लेकिन आप LOAD DATA INFILE
चला सकते हैं PREPARE
using का उपयोग किए बिना . आपको शेल वेरिएबल प्रतिस्थापन का उपयोग करके फ़ाइल नाम को कथन में इंटरपोलेट करना होगा और फिर इसे सीधे SQL कथन के रूप में चलाना होगा।
आपकी update.sql फ़ाइल कुछ इस तरह दिख सकती है:
LOAD DATA LOCAL INFILE '%spacename%' INTO TABLE tmp
FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n';
फिर आप अपने शेल वेरिएबल को फ़ाइल में स्थानापन्न कर सकते हैं और परिणाम को इस प्रकार चला सकते हैं:
sed s/%spacename%/$1/ update.sql |
mysql -h "localhost" -u "root" "-pmypassword" "mydb"
एक और आसान तरीका है mysqlimport
का इस्तेमाल करना , इसके अलावा यह आवश्यक है कि इनपुट फ़ाइल नाम आपके तालिका नाम के समान हो। आप या तो अपनी इनपुट फ़ाइल का नाम बदलकर उस तालिका से मिलान कर सकते हैं जिसमें आप लोड करना चाहते हैं (जिसे आप tmp
कहते हैं) ), या फिर एक प्रतीकात्मक लिंक बनाएं:
ln -s $1 /tmp/tmp.list
mysqlimport --local -h "localhost" -u "root" "-pmypassword" "mydb" /tmp/tmp.list
rm -f /tmp/tmp.list
".list" एक्सटेंशन को mysqlimport द्वारा अनदेखा कर दिया जाता है, इसलिए आप किसी भी फ़ाइल एक्सटेंशन का उपयोग कर सकते हैं, या कोई भी नहीं।