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

MySQL एकाधिक तालिकाओं में सम्मिलित करें? (डेटाबेस सामान्यीकरण?)

नहीं, आप एक MySQL कमांड में एकाधिक तालिकाओं में सम्मिलित नहीं कर सकते हैं। हालांकि आप लेन-देन का उपयोग कर सकते हैं।

BEGIN;
INSERT INTO users (username, password)
  VALUES('test', 'test');
INSERT INTO profiles (userid, bio, homepage) 
  VALUES(LAST_INSERT_ID(),'Hello world!', 'http://www.stackoverflow.com');
COMMIT;

LAST_INSERT_ID()<पर एक नज़र डालें /कोड> स्वत:वृद्धि मूल्यों का पुन:उपयोग करने के लिए।

आपने कहा "इतने समय के बाद भी यह पता लगाने की कोशिश कर रहा है, यह अभी भी काम नहीं कर रहा है। क्या मैं बस अभी-अभी जेनरेट की गई आईडी को $var में नहीं डाल सकता और उस $var को सभी MySQL कमांड में नहीं डाल सकता? उन्हें> "

मुझे विस्तार से बताएं:यहां 3 संभावित तरीके हैं:

  1. कोड में आप ऊपर देखते हैं। यह सब MySQL में करता है, और LAST_INSERT_ID() दूसरे स्टेटमेंट में स्वतः ही ऑटोइनक्रिकमेंट-कॉलम का मान होगा जो पहले स्टेटमेंट में डाला गया था।

    दुर्भाग्य से, जब दूसरा कथन स्वतः-वृद्धि कॉलम वाली तालिका में पंक्तियों को सम्मिलित करता है, तो LAST_INSERT_ID() तालिका 2 में अद्यतन किया जाएगा, न कि तालिका 1 में। यदि आपको बाद में तालिका 1 की अभी भी आवश्यकता है, तो हमें इसे एक चर में संग्रहीत करना होगा। यह हमें 2 और 3 तरीकों की ओर ले जाता है:

  2. LAST_INSERT_ID() का स्टॉक करेगा ina MySQL वैरिएबल:

    INSERT ...
    SELECT LAST_INSERT_ID() INTO @mysql_variable_here;
    INSERT INTO table2 (@mysql_variable_here, ...);
    INSERT INTO table3 (@mysql_variable_here, ...);
    
  3. LAST_INSERT_ID() का स्टॉक करेगा aphp वेरिएबल में (या कोई भी भाषा जो आपकी पसंद के डेटाबेस से जुड़ सकती है):

    • INSERT...
    • LAST_INSERT_ID() को पुनः प्राप्त करने के लिए अपनी भाषा का उपयोग करें , या तो MySQL में उस शाब्दिक कथन को निष्पादित करके, या उदाहरण के लिए php के mysql_insert_id() का उपयोग करके जो आपके लिए ऐसा करता है
    • INSERT [यहां अपने php वेरिएबल का उपयोग करें]

चेतावनी

आप इसे हल करने का जो भी तरीका चुनें, आपको यह तय करना होगा कि क्या होना चाहिए क्या प्रश्नों के बीच निष्पादन बाधित होना चाहिए (उदाहरण के लिए, आपका डेटाबेस-सर्वर क्रैश हो जाता है)। यदि आप "कुछ समाप्त कर चुके हैं, अन्य नहीं" के साथ रह सकते हैं, तो इसे न पढ़ें।

हालांकि, यदि आप तय करते हैं कि "या तो सभी प्रश्न समाप्त हो जाते हैं, या कोई भी समाप्त नहीं होता है - मुझे कुछ तालिकाओं में पंक्तियाँ नहीं चाहिए, लेकिन दूसरों में कोई मिलान पंक्तियाँ नहीं चाहिए, मैं हमेशा चाहता हूँ कि मेरी डेटाबेस तालिकाएँ सुसंगत हों", आपको लेन-देन में सभी कथनों को लपेटने की आवश्यकता है . इसलिए मैंने BEGIN . का उपयोग किया है और कमिट यहाँ।



  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 डेटाबेस को PHP वेबसाइट से कैसे कनेक्ट करें

  2. डॉकर पर MySQL - अपने डेटाबेस को कंटेनरीकृत कैसे करें :नया श्वेतपत्र

  3. दी गई आईडी के लिए नवीनतम पंक्ति प्राप्त करें

  4. MySQL लेफ्ट जॉइन के साथ पंक्तियों को हटाना

  5. जावा टूल के लिए LINQ