Mysql में कई पंक्तियों को सम्मिलित करना


349

यदि मैं एक साथ कई पंक्तियाँ सम्मिलित करता हूं तो डेटाबेस क्वेरी तेजी से होती है:

पसंद

INSERT....

UNION

INSERT....

UNION

(मुझे 2-3000 पंक्तियों की तरह सम्मिलित करना होगा)


8
चयन के लिए यूनिअन है।
जैकब

1
कैसे पंक्तियाँ आ रही हैं? क्या आप सीधे MySQL क्वेरी ब्राउज़र पर SQL लिख रहे हैं या PHP या C # या कुछ और के अंदर से उपयोग कर रहे हैं। यदि आप बाद के मामले में फिट बैठते हैं, तो निम्न लिंक देखें: सबसे तेज़ तरीका कई पंक्तियों के साथ
RKh

जवाबों:


1176

INSERTVALUESवाक्यविन्यास का उपयोग करने वाले कथन कई पंक्तियों को सम्मिलित कर सकते हैं। ऐसा करने के लिए, कॉलम मानों की कई सूचियों को शामिल करें, प्रत्येक कोष्ठक के भीतर संलग्न और अल्पविराम द्वारा अलग किया गया।

उदाहरण:

INSERT INTO tbl_name
    (a,b,c)
VALUES
    (1,2,3),
    (4,5,6),
    (7,8,9);

स्रोत


@RPK। मैं आपसे सहमत हूं लेकिन मुझे उसके डेटा स्रोत का पता नहीं है। जैसा कि मैंने पहले ही लिखा है, अगर उसके पास कोई फ़ाइल है, तो मैं लोड डेटा सिंटैक्स का उपयोग करूँगा क्योंकि क्यूलेरिस सुझाव देता है। :)
निकोला कोसु

इसका उपयोग करना भी संभव है INSERT INTO Table SELECT 1, '14/05/2012', 3 UNION SELECT 2, '05/14/2012', 3। बेशक, यह केवल सम्मिलित किए गए मूल्यों से बेहतर होगा जो विभिन्न तालिकाओं से आ रहे हैं।
ज़ोहर पेले

72
सहायक संदर्भ, क्योंकि कभी-कभी मैं बस सरल वाक्यविन्यास भूल जाता हूं।
कैप्टन हाइपरटेक्स्ट

पंक्तियों की सामग्री को संग्रहीत करने वाला अस्थाई चर यहाँ a, b और c है?
नमस्ते

3
@Lealo नहीं, वे टेबल कॉलम नाम हैं जिसमें समान क्रम में मान सम्मिलित करना है।
बीटलज्यूइस

60

यदि आपके पास टेक्स्ट-फाइल में आपका डेटा है, तो आप LOAD DATA INFILE का उपयोग कर सकते हैं ।

पाठ फ़ाइल से तालिका लोड करते समय, LOAD DATA INFILE का उपयोग करें। यह आमतौर पर INSERT बयानों का उपयोग करने से 20 गुना तेज है।

INSERT स्टेटमेंट का अनुकूलन

आप ऊपर दिए गए लिंक पर अपने इंसर्ट स्टेटमेंट को कैसे तेज करें, इस बारे में अधिक टिप्स पा सकते हैं।


3
डुप्लिकेट रिकॉर्ड के बारे में क्या?
मत्तो

2
@Matteo डुप्लिकेट को आपके द्वारा परिभाषित स्कीमा के आधार पर डेटाबेस द्वारा डाला या खारिज कर दिया जाएगा।
अंकुश

Mysql मल्टीकेरिज़ का प्रयोग करें
फ्रांसिस्को

1
दूसरा लिंक 404.
12

1
टूटी हुई लिंक "स्पीड ऑफ़ इंसर्ट स्टेटमेंट्स" अब इसमें शामिल है: INSERT स्टेटमेंट्स ऑप्टिमाइज़ करना
केनेथ एम। कोलानो

27
BEGIN;
INSERT INTO test_b (price_sum)
  SELECT price
  FROM   test_a;
INSERT INTO test_c (price_summ) 
  SELECT price
FROM   test_a;
COMMIT;

3
यह अधिक उत्थान के योग्य है, इसके उपयोग से आप अन्य तालिकाओं से प्राप्त डेटा सम्मिलित कर सकते हैं
Novastorm

4
यदि केवल इस कोड के टुकड़े में क्या हो रहा है, इसके बारे में एक स्पष्टीकरण था, यह देखते हुए कि मुझे "अन्य तालिकाओं से पुनर्प्राप्त डेटा सम्मिलित करना है" ...
एलेस्टर टैनेक जावस मृग

0

यहाँ एक PHP समाधान का उपयोग करने के लिए तैयार है: m (कई-से-कई संबंध) तालिका:

// get data
$table_1 = get_table_1_rows();
$table_2_fk_id = 123;

// prepare first part of the query (before values)
$query = "INSERT INTO `table` (
   `table_1_fk_id`,
   `table_2_fk_id`,
   `insert_date`
) VALUES ";

//loop the table 1 to get all foreign keys and put it in array
foreach($table_1 as $row) {
    $query_values[] = "(".$row["table_1_pk_id"].", $table_2_fk_id, NOW())";
}

// Implode the query values array with a coma and execute the query.
$db->query($query . implode(',',$query_values));

प्रत्यारोपण () का उपयोग करने से "अंतिम चरित्र" समस्या को दरकिनार किया जाता है लेकिन यह एक बड़ी मेमोरी ओवरहेड बनाता है। उसने 3000 पंक्तियों के लिए कहा, कल्पना करें कि प्रत्येक पंक्ति में 1kb डेटा है, जो कि पहले से ही 3MB कच्चा डेटा है। सरणी 30MB मेमोरी लेगी वह पहले से ही $ 30 से एक और उपभोग करता है $ तालिका 1 इसलिए स्क्रिप्ट 60 एमबी का उपयोग करेगी। बस कह रहा है, अन्यथा यह एक अच्छा समाधान है
जॉन

यह मेरी स्थिति के लिए उपयोगी है।
बिलाल ekसिमेक

-11
// db table name / blog_post / menu /  site_title
// Insert into Table (column names separated with comma)
$sql = "INSERT INTO product_cate (site_title, sub_title) 
  VALUES ('$site_title', '$sub_title')";

// db table name / blog_post / menu /  site_title
// Insert into Table (column names separated with comma)
$sql = "INSERT INTO menu (menu_title, sub_menu)
  VALUES ('$menu_title', '$sub_menu', )";

// db table name / blog_post /  menu /  site_title
// Insert into Table (column names separated with comma)
$sql = "INSERT INTO blog_post (post_title, post_des, post_img)
  VALUES ('$post_title ', '$post_des', '$post_img')";

इस प्रतिक्रिया की उलझन के अलावा, आप SQL इंजेक्शन के लिए भी असुरक्षित हो सकते हैं, यह मानते हुए कि आप PHP का उपयोग कर रहे हैं।
ultrafez

2
1. आपके SQL कोड में बग है। 2. अगला $ sql मान पिछले $ sql मान का स्थान लेगा।
मारवान सलीम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.