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

mysql2sqlite.sh Auto_Increment

AUTO_INCREMENT कीवर्ड MySQL के लिए विशिष्ट है।

SQLite में एक कीवर्ड है AUTOINCREMENT (अंडरस्कोर के बिना) जिसका अर्थ है कि कॉलम एकरस रूप से बढ़ते हुए मानों को स्वतः उत्पन्न करता है जिनका तालिका में पहले कभी उपयोग नहीं किया गया है।

अगर आप AUTOINCREMENT को छोड़ देते हैं कीवर्ड (जैसा कि आप जो स्क्रिप्ट दिखाते हैं वह वर्तमान में है), SQLite ROWID को एक नई पंक्ति में निर्दिष्ट करता है, जिसका अर्थ है कि यह तालिका में वर्तमान सबसे बड़ी ROWID से 1 मान अधिक होगा। यदि आप तालिका के ऊपरी सिरे से पंक्तियों को हटाते हैं और फिर नई पंक्तियाँ सम्मिलित करते हैं तो यह मानों का पुन:उपयोग कर सकता है।

देखें http://www.sqlite.org/autoinc.html अधिक जानकारी के लिए।

यदि आप AUTOINCREMENT . जोड़ने के लिए इस स्क्रिप्ट को संशोधित करना चाहते हैं कीवर्ड, ऐसा लगता है कि आप इस लाइन को संशोधित कर सकते हैं:

gsub( /AUTO_INCREMENT|auto_increment/, "" )

इसके लिए:

gsub( /AUTO_INCREMENT|auto_increment/, "AUTOINCREMENT" )

अपनी टिप्पणी दें:

ठीक है, मैंने इसे sqlite3 का उपयोग करके एक डमी टेबल पर आजमाया।

sqlite> create table foo ( 
  i int autoincrement, 
  primary key (i)
);
Error: near "autoincrement": syntax error

स्पष्ट रूप से SQLite के लिए आवश्यक है कि autoincrement स्तंभ-स्तर का अनुसरण करें प्राथमिक कुंजी बाधा। तालिका-स्तर की बाधा के रूप में अंत में पीके बाधा डालने के MySQL सम्मेलन से यह खुश नहीं है। यह SQLite क्रिएट टेबल के लिए दस्तावेज़ में सिंटैक्स डायग्राम द्वारा समर्थित है। ।

आइए primary key डालने का प्रयास करें autoincrement . से पहले .

sqlite> create table foo ( 
  i int primary key autoincrement
);
Error: AUTOINCREMENT is only allowed on an INTEGER PRIMARY KEY

और जाहिरा तौर पर SQLite को "INT" पसंद नहीं है, यह "INTEGER" पसंद करता है:

sqlite> create table foo (
  i integer primary key autoincrement
);
sqlite>

सफलता!

तो आपकी awk स्क्रिप्ट MySQL तालिका DDL को SQLite में उतनी आसानी से अनुवाद करने में सक्षम नहीं है जितना आपने सोचा था।

अपनी टिप्पणी दें:

आप एसक्यूएल::अनुवादक , जो बहुत काम है। मैं आपके लिए पूरी कामकाजी स्क्रिप्ट नहीं लिखने जा रहा हूं।

इसे वास्तव में हल करने के लिए, और एक स्क्रिप्ट बनाएं जो डीडीएल को SQLite के साथ संगत बनाने के लिए सभी वाक्यविन्यास परिवर्तनों को स्वचालित कर सके, आपको SQL डीडीएल के लिए एक पूर्ण पार्सर लागू करने की आवश्यकता होगी। awk में ऐसा करना व्यावहारिक नहीं है।

मेरा सुझाव है कि आप अपनी स्क्रिप्ट का उपयोग कुछ . के लिए करें कीवर्ड प्रतिस्थापन के मामलों में, और फिर यदि और परिवर्तन आवश्यक हैं, तो उन्हें टेक्स्ट एडिटर में हाथ से ठीक करें।

समझौता करने पर भी विचार करें। यदि AUTOINCREMENT . का उपयोग करने के लिए DDL को पुन:स्वरूपित करना बहुत कठिन है, तो SQLite में सुविधा, विचार करें कि क्या डिफ़ॉल्ट ROWID कार्यक्षमता काफी करीब है। मतभेदों को समझने के लिए मैंने ऊपर जो लिंक पोस्ट किया है उसे पढ़ें।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एसक्यूएल रिटर्न 1,0 नए वेरिएबल में केस के आधार पर जब स्टेटमेंट कई अन्य वेरिएबल का जिक्र करता है

  2. मैं टेबल पर ON DELETE बाधा कैसे जोड़ सकता हूं?

  3. पीडीओ पीएचपी के साथ पेजिनेशन कैसे बनाएं

  4. MySQL चयन क्वेरी बहुत धीमी है

  5. कंसोल डालने के बाद mySQL ट्रिगर काम करता है, लेकिन स्क्रिप्ट डालने के बाद नहीं