आप एक ऑटो-इंक्रीमेंट कॉलम में सम्मिलित कर सकते हैं और एक मूल्य निर्दिष्ट कर सकते हैं। यह ठीक है; यह बस ऑटो-इन्क्रीमेंट जनरेटर को ओवरराइड करता है।
यदि आप NULL या 0 का मान सम्मिलित करने का प्रयास करते हैं DEFAULT
, या यदि आप अपने INSERT कथन में कॉलम से ऑटो-इंक्रीमेंट कॉलम को छोड़ते हैं, तो यह ऑटो-इन्क्रीमेंट जनरेटर को सक्रिय करता है।
तो, यह ठीक है INSERT INTO table1 SELECT * FROM table2
(वैसे, आपको कोष्ठकों की आवश्यकता नहीं है)। इसका मतलब यह है कि आईडी मानों को table2
शब्दशः कॉपी किया जाएगा, और नए मान उत्पन्न नहींtable1
होंगे ।
यदि आप नए मान उत्पन्न करना चाहते table1
हैं, तो आप ऐसा नहीं कर सकते SELECT *
। या तो आप आईडी कॉलम के लिए null या 0 का उपयोग करते हैं:
INSERT INTO table1 SELECT 0, col1, col2, col3, ... FROM table2;
या फिर आप INSERT स्टेटमेंट की कॉलम सूची और SELECT स्टेटमेंट की चयन सूची दोनों से कॉलम को छोड़ देते हैं:
-- No id in either case:
INSERT INTO table1 (col1, col2, col3) SELECT col1, col2, col3, ... FROM table2;
आपके पूछने से पहले, "एक कॉलम को छोड़कर" का चयन करने के लिए SQL में कोई सिंटैक्स नहीं है। आपको उन स्तंभ नामों की पूरी सूची स्पेल करनी होगी जिन्हें आप सम्मिलित करना चाहते हैं।