दिलचस्प पोस्ट
बास सरणी में कोई मूल्य शामिल है या नहीं प्रक्षेपक में अपेक्षित स्थितियां जावा प्राइमिटिव्स क्या ढेर या ढेर पर जाते हैं? Xcode: कोड वाक्यविन्यास रंग खो देता है कैसे एईएस एन्क्रिप्टेड स्ट्रिंग से PKCS7 पैडिंग को जोड़ने / निकालने के लिए? उत्पादन में डॉकर कंटेनरों को कैसे स्केल किया जाए <option> tag के अंदर href लिंक का उपयोग कर PHP जोड़ने और concatenating जब भ्रमित है सी # में "दिनांक समय" का क्या अर्थ है? दो या अधिक iPhone अनुप्रयोगों के बीच डेटा साझा करें AngularJS $ http, CORS और http प्रमाणीकरण HTTP हेडर कैसे सेट करें (कैश-कंट्रोल के लिए)? कैसे बाश में लाइन से दो फाइलों लाइन को मर्ज करने के लिए $ पर और $ कोणीय में प्रसारित मुझे एक नई शाखा को स्पष्ट रूप से पुश करने की आवश्यकता क्यों है?

MySQL में, क्या मैं एक ही तालिका में सम्मिलित करने के लिए एक पंक्ति को कॉपी कर सकता हूँ?

insert into table select * from table where primarykey=1 

मैं एक ही तालिका में डालने के लिए एक पंक्ति को कॉपी करना चाहता हूं (यानी, मैं तालिका में मौजूदा पंक्ति को डुप्लिकेट करना चाहता हूं), लेकिन मैं "चयन" के बाद सभी कॉलमों को सूचीबद्ध किए बिना ऐसा करना चाहता हूं, क्योंकि यह तालिका है बहुत सारे स्तंभ

लेकिन जब मैं यह करता हूं, मुझे त्रुटि मिलती है:

कुंजी 1 के लिए डुप्लिकेट प्रविष्टि 'xxx'

मैं इसे एक अस्थायी कंटेनर के रूप में एक ही कॉलम के साथ अन्य तालिका बनाकर रिकॉर्ड कर सकता हूं, जिसे मैं प्रतिलिपि बनाना चाहता हूं:

 create table oldtable_temp like oldtable; insert into oldtable_temp select * from oldtable where key=1; update oldtable_tem set key=2; insert into oldtable select * from oldtable where key=2; 

क्या इसका समाधान करने का एक आसान तरीका है?

वेब के समाधान से एकत्रित समाधान "MySQL में, क्या मैं एक ही तालिका में सम्मिलित करने के लिए एक पंक्ति को कॉपी कर सकता हूँ?"

मैंने कुछ बदलावों के साथ लियोनार्ड चालिस की तकनीक का इस्तेमाल किया:

 CREATE TEMPORARY TABLE tmptable_1 SELECT * FROM table WHERE primarykey = 1; UPDATE tmptable_1 SET primarykey = NULL; INSERT INTO table SELECT * FROM tmptable_1; DROP TEMPORARY TABLE IF EXISTS tmptable_1; 

एक अस्थायी तालिका के रूप में, एक से अधिक रिकॉर्ड नहीं होना चाहिए, इसलिए आपको प्राथमिक कुंजी के बारे में चिंता करने की ज़रूरत नहीं है। इसे रिक्त करने के लिए सेट करने से MySQL को मान चुनने की अनुमति मिलती है, इसलिए डुप्लिकेट बनाने का कोई जोखिम नहीं है।

यदि आप सुपर-सुनिश्चित होना चाहते हैं कि आपको केवल एक पंक्ति डालने की आवश्यकता है, तो आप INSERT लाइन के अंत में LIMIT 1 जोड़ सकते हैं।

ध्यान दें कि मैंने भी प्राथमिक कुंजी मान (1 इस मामले में) को मेरे अस्थायी तालिका नाम से जोड़ा है

अपडेट 07/07/2014 – मेरे उत्तर के आधार पर, ग्रिम द्वारा जवाब , यह एक बेहतर उपाय है क्योंकि यह मेरे समाधान के नीचे सुधार करता है, इसलिए मैं उस का उपयोग करने का सुझाव देता हूं

आप निम्न स्तंभों के साथ सभी स्तंभों को सूचीबद्ध किए बिना ऐसा कर सकते हैं:

 CREATE TEMPORARY TABLE tmptable SELECT * FROM table WHERE primarykey = 1; UPDATE tmptable SET primarykey = 2 WHERE primarykey = 1; INSERT INTO table SELECT * FROM tmptable WHERE primarykey = 2; 

आप अन्य कुंजी में प्राथमिक कुंजी को बदलने का फैसला कर सकते हैं

मैं मान रहा हूँ कि आप चाहते हैं कि नया रिकॉर्ड एक नया primarykey । यदि primarykey है AUTO_INCREMENT तो बस ऐसा करें:

 INSERT INTO table (col1, col2, col3, ...) SELECT col1, col2, col3, ... FROM table WHERE primarykey = 1 

… जहां col1, col2, col3, ... primarykey अलावा सभी primarykey

यदि यह एक AUTO_INCREMENT स्तंभ नहीं है और आप primarykey लिए नया मान चुनने में सक्षम होना चाहते हैं तो यह समान है:

 INSERT INTO table (primarykey, col2, col3, ...) SELECT 567, col2, col3, ... FROM table WHERE primarykey = 1 

… जहां primarykey लिए 567 का नया मान है

आप तालिका डालने का प्रयास भी कर सकते हैं, सम्मिलित करें आदेश ढूंढकर उसे संपादित कर सकते हैं:

 mysqldump -umyuser -p mydatabase --skip-extended-insert mytable > outfile.sql 

--skip-extended-insert आपको प्रति पंक्ति एक डालें कमांड देता है फिर आप अपने पसंदीदा टेक्स्ट एडिटर में पंक्ति पा सकते हैं, कमांड निकाल सकते हैं और प्राथमिक कुंजी को "डिफ़ॉल्ट" में बदल सकते हैं।

यह प्रक्रिया मानती है कि:

  • आपके पास _duplicate_temp_table नहीं है
  • आपकी प्राथमिक कुंजी int है
  • आपके पास तालिका बनाने की पहुंच है

बेशक यह सही नहीं है, लेकिन निश्चित रूप से (शायद अधिकांश) मामलों में यह काम करेगा

 DELIMITER $$ CREATE PROCEDURE DUPLICATE_ROW(copytable VARCHAR(255), primarykey VARCHAR(255), copyid INT, out newid INT) BEGIN DECLARE EXIT HANDLER FOR SQLEXCEPTION SET @error=1; SET @temptable = '_duplicate_temp_table'; SET @sql_text = CONCAT('CREATE TABLE ', @temptable, ' LIKE ', copytable); PREPARE stmt FROM @sql_text; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET @sql_text = CONCAT('INSERT INTO ', @temptable, ' SELECT * FROM ', copytable, ' where ', primarykey,'=', copyid); PREPARE stmt FROM @sql_text; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET @sql_text = CONCAT('SELECT max(', primarykey, ')+1 FROM ', copytable, ' INTO @newid'); PREPARE stmt FROM @sql_text; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET @sql_text = CONCAT('UPDATE ', @temptable, ' SET ', primarykey, '=@newid'); PREPARE stmt FROM @sql_text; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET @sql_text = CONCAT('INSERT INTO ', copytable, ' SELECT * FROM ', @temptable, ''); PREPARE stmt FROM @sql_text; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET @sql_text = CONCAT('DROP TABLE ', @temptable); PREPARE stmt FROM @sql_text; EXECUTE stmt; DEALLOCATE PREPARE stmt; SELECT @newid INTO newid; END $$ DELIMITER ; CALL DUPLICATE_ROW('table', 'primarykey', 1, @duplicate_id); SELECT @duplicate_id; 

निम्नलिखित में से कुछ इस साइट से दूर चली गई थी। किसी भी संख्या के साथ तालिका में एक रिकॉर्ड को डुप्लिकेट करने के लिए मैंने ऐसा किया है:

यह भी मानता है कि टेबल की शुरुआत में आपके पास एआई फील्ड है

 function duplicateRow( $id = 1 ){ dbLink();//my db connection $qColumnNames = mysql_query("SHOW COLUMNS FROM table") or die("mysql error"); $numColumns = mysql_num_rows($qColumnNames); for ($x = 0;$x < $numColumns;$x++){ $colname[] = mysql_fetch_row($qColumnNames); } $sql = "SELECT * FROM table WHERE tableId = '$id'"; $row = mysql_fetch_row(mysql_query($sql)); $sql = "INSERT INTO table SET "; for($i=1;$i<count($colname)-4;$i++){//i set to 1 to preclude the id field //we set count($colname)-4 to avoid the last 4 fields (good for our implementation) $sql .= "`".$colname[$i][0]."` = '".$row[$i]. "', "; } $sql .= " CreateTime = NOW()";// we need the new record to have a new timestamp mysql_query($sql); $sql = "SELECT MAX(tableId) FROM table"; $res = mysql_query($sql); $row = mysql_fetch_row($res); return $row[0];//gives the new ID from auto incrementing } 

यदि आपकी तालिका की प्राथमिक कुंजी फ़ील्ड एक ऑटो वृद्धि फ़ील्ड है, तो आप कॉलम के साथ क्वेरी का उपयोग कर सकते हैं। उदाहरण के लिए, test_tbl नामित आपकी तालिका में 3 फ़ील्ड id, name, age के रूप में है id एक प्राथमिक कुंजी फ़ील्ड और ऑटो वृद्धि है, इसलिए आप पंक्ति को डुप्लिकेट करने के लिए निम्न क्वेरी का उपयोग कर सकते हैं:

 INSERT INTO `test_tbl` (`name`,`age`) SELECT `name`,`age` FROM `test_tbl`; 

यह क्वेरी परिणाम प्रत्येक पंक्ति में डुप्लिकेट करते हैं


यदि आपकी तालिका की प्राथमिक कुंजी फ़ील्ड एक ऑटो वृद्धि फ़ील्ड नहीं है, तो आप निम्न विधि का उपयोग कर सकते हैं:

 INSERT INTO `test_tbl` (`id`,`name`,`age`) SELECT 20,`name`,`age` FROM `test_tbl` WHERE id = 19; 

इस क्वेरी का परिणाम id=19 की एक डुप्लिकेट पंक्ति है जो id=19 रूप में डाला गया है

आप लगभग अपनी पहली क्वेरी के साथ ही आपको कॉलम निर्दिष्ट करने की ज़रूरत है, इस तरह से आप अपनी प्राथमिक कुंजी को सम्मिलित करने में शामिल कर सकते हैं, जो आपके द्वारा स्वचालित रूप से तालिका के लिए स्वतः-वृद्धि को लागू करने के लिए स्वचालित रूप से एक नई प्राथमिक कुंजी बनाएगा प्रवेश।

उदाहरण के लिए इसे बदलें:

 insert into table select * from table where primarykey=1 

इसके लिए:

 INSERT INTO table (col1, col2, col3) SELECT col1, col2, col3 FROM table WHERE primarykey = 1 

INSERT के लिए या क्वेरी के चयन भागों के लिए कॉलम सूची में प्राथमिक कुंजी कॉलम को शामिल नहीं करें।

मुझे इसमें देर हो सकती है, लेकिन मेरे पास एक समान समाधान है जो मेरे लिए काम किया है

  INSERT INTO `orders` SELECT MAX(`order_id`)+1,`container_id`, `order_date`, `receive_date`, `timestamp` FROM `orders` WHERE `order_id` = 1 

इस तरह मुझे अस्थायी तालिका और आदि बनाने की आवश्यकता नहीं है। जैसा पंक्ति एक ही तालिका में कॉपी की गई है, Max(PK)+1 फ़ंक्शन आसानी से इस्तेमाल किया जा सकता है।

मैं इस प्रश्न के समाधान की तलाश में आया (सिंटैक्स को भूल गया था) और मैंने अपनी क्वेरी को समाप्त कर दिया। मजेदार कैसे चीजें कुछ समय से काम करती हैं

सादर

मैंने @ लिओनार्ड चालीस के समाधान को अपडेट किया क्योंकि यह मेरे लिए दूसरों के रूप में काम नहीं करता। मैंने WHERE SET primaryKey = 0 तालिका में WHERE खंडों को हटा दिया और SET primaryKey = 0 किया, इसलिए MySQL स्वत: वेतन वृद्धि को प्राथमिक कुंजी

 CREATE TEMPORARY TABLE tmptable SELECT * FROM myTable; UPDATE tmptable SET primaryKey = 0; INSERT INTO myTable SELECT * FROM tmptable; 

यह टेबल में सभी पंक्तियों को डुप्लिकेट करना है।

मुझे यह करना था और यह मेरा मैनुअल समाधान था:

  1. Phpmyadmin में , उस पंक्ति की जांच करें जिसे आप कॉपी करना चाहते हैं
  2. क्वेरी के परिणाम के नीचे नीचे 'निर्यात' पर क्लिक करें
  3. अगले पृष्ठ पर 'फाइल के रूप में सहेजें' चेक करें, फिर 'जाओ' पर क्लिक करें
  4. एक टेक्स्ट एडिटर के साथ निर्यात की गई फ़ाइल को खोलें, प्राथमिक फ़ील्ड का मान ढूंढें और इसे अनूठी चीज़ों में बदलें
  5. वापस ' phpmyadmin ' पर क्लिक करें 'आयात करें' टैब पर क्लिक करें , ब्राउज़िंग के अंतर्गत .sql फ़ाइल को आयात करने के लिए फ़ाइल की स्थिति जानें, 'जाओ' पर क्लिक करें और डुप्लिकेट पंक्ति डालें।

यदि आपको नहीं पता कि प्राथमिक फ़ील्ड क्या है, तो अपने phpmyadmin पृष्ठ पर वापस देखो, 'संरचना' टैब पर क्लिक करें और पृष्ठ के निचले भाग पर 'इंडेक्स' के तहत यह आपको दिखाएगा कि 'फ़ील्ड' के पास एक 'कुंजीनाम' है मूल्य 'प्राथमिक'

चारों ओर एक लंबा रास्ता है, लेकिन अगर आप मार्कअप से निपटना नहीं चाहते हैं और सिर्फ एक पंक्ति को डुप्लिकेट करने की आवश्यकता है, तो आप वहां जाते हैं।

यदि प्राथमिक कुंजी ऑटो वृद्धि है, तो प्राथमिक कुंजी को छोड़कर प्रत्येक फ़ील्ड को निर्दिष्ट करें

INSERT INTO table(field1,field2,field3) SELECT (field1,field2,field3) FROM table WHERE primarykey=1

यह कुछ रचनात्मकता से प्राप्त किया जा सकता है:

 SET @sql = CONCAT('INSERT INTO <table> SELECT null, ', (SELECT GROUP_CONCAT(COLUMN_NAME) FROM information_schema.columns WHERE table_schema = '<database>' AND table_name = '<table>' AND column_name NOT IN ('id')), ' from <table> WHERE id = <id>'); PREPARE stmt1 FROM @sql; EXECUTE stmt1; 

इससे नतीजा होगा कि चयनित पंक्ति से आईडी के बजाय एक स्वत: वृद्धि हुई आईडी होनी चाहिए।

मैंने थोड़ा बदलाव के साथ ग्रिम की तकनीक का इस्तेमाल किया: यदि कोई इस प्रश्न की तलाश कर रहा है क्योंकि प्राथमिक कुंजी समस्या के कारण सरल क्वेरी नहीं कर सकता है:

 INSERT INTO table SELECT * FROM table WHERE primakey=1; 

मेरी MySQL 5.6.26 को स्थापित करने के साथ, कुंजी नल योग्य नहीं है और एक त्रुटि उत्पन्न करती है:

 #1048 - Column 'primakey' cannot be null 

इसलिए अस्थायी तालिका बनाने के बाद मैं प्राथमिक कुंजी को रिक्त स्थान पर बदलूंगा

 CREATE TEMPORARY TABLE tmptable_1 SELECT * FROM table WHERE primarykey = 1; ALTER TABLE tmptable_1 MODIFY primarykey int(12) null; UPDATE tmptable_1 SET primarykey = NULL; INSERT INTO table SELECT * FROM tmptable_1; DROP TEMPORARY TABLE IF EXISTS tmptable_1; 

मैं नीचे का प्रयोग करेंगे,

 insert into ORDER_ITEM select * from ORDER_ITEM where ITEM_NUMBER =123; 

Necropost के लिए क्षमा करें, लेकिन यह है कि मैं गूगल के साथ बदल गया और जब से मैंने यह सहायक पाया लेकिन समस्याग्रस्त मैं किसी और के लिए एक महत्वपूर्ण संशोधन में योगदान करना चाहता था जो इसे खोदता है

सबसे पहले, मैं एसआईएल सर्वर का उपयोग कर रहा हूं, MySQL नहीं, लेकिन मुझे लगता है कि इसे इसी तरह से काम करना चाहिए। मैंने लियोनार्ड चुलिस के समाधान का इस्तेमाल किया क्योंकि यह सरल था और जरूरत से मुलाकात की, हालांकि इसके साथ एक समस्या है – अगर आप पीके लेते हैं और इसे 1 से बढ़ाना चाहते हैं तो क्या होता है अगर आपने अन्य रिकॉर्ड जोड़ दिए हैं क्योंकि सवाल में पंक्ति जोड़ा गया था । मैंने निर्णय लिया कि सिस्टम को पीके के ऑटोमैन्टरमेंटिंग को संभालने के लिए सबसे अच्छा था, इसलिए मैंने निम्न किया:

 SELECT * INTO #tmpTable FROM Table WHERE primarykey = 1 --Optionally you can modify one or more fields here like this: --UPDATE #tmpTable SET somefield = newData ALTER TABLE #tmpTable DROP COLUMN TicketUpdateID INSERT INTO Tickets SELECT * FROM #tmpTable DROP TABLE #tmpTable 

मेरा मानना ​​है कि यह उसी तरह MySQL में काम करेगा, लेकिन मैं इसका परीक्षण नहीं कर सकता, खेद है

मुझे पता है कि यह एक पुराना सवाल है, लेकिन यहां एक और समाधान है:

यह मुख्य तालिका में एक पंक्ति को डुप्लिकेट करता है, प्राथमिक कुंजी मान कर स्वत:-वेतन वृद्धि है, और लिंक की गई टेबल डेटा की प्रतियां नई मुख्य तालिका आईडी के साथ बनाता है

स्तंभ नाम प्राप्त करने के लिए अन्य विकल्प:
– टैब्लेनेम से सेव कॉलम्स; (कॉलम का नाम: फील्ड)
-Describe tablename (कॉलम का नाम: फील्ड)
-छोड़ column_name से information_schema.columns WHERE तालिका_नाम = 'टैब्लेनाम' (कॉलम का नाम: column_name)

 //First, copy main_table row $ColumnHdr=''; $Query="SHOW COLUMNS FROM `main_table`;"; $Result=Wrappedmysql_query($Query,$link,__FILE__,__LINE__); while($Row=mysql_fetch_array($Result)) { if($Row['Field']=='MainTableID') //skip main table id in column list continue; $ColumnHdr.=",`" . $Row['Field'] . "`"; } $Query="INSERT INTO `main_table` (" . substr($ColumnHdr,1) . ") (SELECT " . substr($ColumnHdr,1) . " FROM `main_table` WHERE `MainTableID`=" . $OldMainTableID . ");"; $Result=Wrappedmysql_query($Query,$link,__FILE__,__LINE__); $NewMainTableID=mysql_insert_id($link); //Change the name (assumes a 30 char field) $Query="UPDATE `main_table` SET `Title`=CONCAT(SUBSTRING(`Title`,1,25),' Copy') WHERE `MainTableID`=" . $NewMainTableID . ";"; $Result=Wrappedmysql_query($Query,$link,__FILE__,__LINE__); //now copy in the linked tables $TableArr=array("main_table_link1","main_table_link2","main_table_link3"); foreach($TableArr as $TableArrK=>$TableArrV) { $ColumnHdr=''; $Query="SHOW COLUMNS FROM `" . $TableArrV . "`;"; $Result=Wrappedmysql_query($Query,$link,__FILE__,__LINE__); while($Row=mysql_fetch_array($Result)) { if($Row['Field']=='MainTableID') //skip main table id in column list, re-added in query continue; if($Row['Field']=='dbID') //skip auto-increment,primary key in linked table continue; $ColumnHdr.=",`" . $Row['Field'] . "`"; } $Query="INSERT INTO `" . $TableArrV . "` (`MainTableID`," . substr($ColumnHdr,1) . ") (SELECT " . $NewMainTableID . "," . substr($ColumnHdr,1) . " FROM `" . $TableArrV . "` WHERE `MainTableID`=" . $OldMainTableID . ");"; $Result=Wrappedmysql_query($Query,$link,__FILE__,__LINE__); } 

मैक्स 233 निश्चित रूप से सही ट्रैक पर था, कम से कम ऑटोइन्किमेंट केस के लिए। हालांकि, वैकल्पिक तालिका नहीं करते बस अस्थायी तालिका में ऑटो-वेतन वृद्धि फ़ील्ड को सेट करें। यह एक त्रुटि पेश करेगा, लेकिन अस्थायी तालिका में सभी क्षेत्रों के निम्नलिखित INSERT होगा और नल ऑटो फ़ील्ड एक अनन्य मान प्राप्त करेगा।

एक टेबल बनाएं

  CREATE TABLE `sample_table` ( `sample_id` INT(10) unsigned NOT NULL AUTO_INCREMENT, `sample_name` VARCHAR(255) NOT NULL, `sample_col_1` TINYINT(1) NOT NULL, `sample_col_2` TINYINT(2) NOT NULL, PRIMARY KEY (`sample_id`), UNIQUE KEY `sample_id` (`sample_id`) ) ENGINE='InnoDB' DEFAULT CHARACTER SET 'utf8' COLLATE 'utf8_general_ci'; 

एक पंक्ति सम्मिलित करें

 INSERT INTO `sample_table` VALUES(NULL, 'sample name', 1, 2); 

ऊपर क्लोन पंक्ति डालें

 INSERT INTO `sample_table` SELECT NULL AS `sample_id`, -- new AUTO_INCREMENT PRIMARY KEY from MySQL 'new dummy entry' AS `sample_name`, -- new UNIQUE KEY from you `sample_col_1`, -- col from old row `sample_col_2` -- col from old row FROM `sample_table` WHERE `sample_id` = 1; 

परीक्षा

 SELECT * FROM `sample_table`; 

यहां एक जवाब है जो मैं इस साइट पर ऑनलाइन पाया गया बताता है कि ऊपर 1 कैसे करना है आप पृष्ठ के निचले हिस्से में जवाब पा सकते हैं। असल में, आप जो करते हैं वह मेमोरी में आयोजित एक अस्थायी तालिका में प्रतिलिपि बनाने की पंक्ति की प्रतिलिपि बनाते हैं। फिर आप अद्यतन का उपयोग कर प्राथमिक कुंजी नंबर बदल सकते हैं। फिर आप इसे लक्ष्य तालिका में पुनः डालें। फिर आप तालिका को छोड़ दें

यह इसके लिए कोड है:

अस्थायी तालिका rescueteam = मेमोरी का चयन करें * से fitnessreport4 WHERE rID = 1; # 1 पंक्ति प्रभावित rescueteam आरआईडी = नल, आरआईडी = 1; # 1 पंक्ति को प्रभावित करने के लिए fitnessreport4 करें। fitnessreport4 करें। 4 से rescueteam ; # 1 पंक्ति प्रभावित ड्रॉप तालिका rescueteam # माईएसक्यूएल ने एक खाली परिणाम सेट लौटाया (अर्थात शून्य
पंक्तियाँ)।

मैंने अस्थायी तालिका rescueteam बनाया मैंने पंक्ति को मेरी मूल तालिका फिटनेस रिपोर्ट 4 से कॉपी किया। मैं फिर अस्थायी तालिका में पंक्ति के लिए प्राथमिक कुंजी को सेट करें ताकि मैं इसे डुप्लिकेट कुंजी त्रुटि प्राप्त किए बिना मूल तालिका में वापस कॉपी कर सकूं। कल शाम को मैंने इस कोड की कोशिश की और यह काम किया।

बहुत ही सरल समाधान के लिए, आप PHPMyAdmin को सीएसवी फ़ाइल के रूप में निर्यात करने के लिए उपयोग कर सकते हैं फिर बस संशोधित CSV फ़ाइल आयात करें आईडी / प्राइमरीकी कॉलम को संपादित करने से पहले कोई मूल्य दिखाने के लिए नहीं।

 SELECT * FROM table where primarykey=1 

फिर पृष्ठ के निचले भाग पर:

यहां छवि विवरण दर्ज करें

कहां कहां है "निर्यात" बस निर्यात, फिर प्राथमिक कुंजी मान को निकालने के लिए सीएसवी फ़ाइल संपादित करें, तो यह खाली है, और फिर बस डेटाबेस में इसे आयात करें, एक नया प्राथमिक कुंजी आयात पर निर्दिष्ट किया जाएगा।

बस अपना कोड पीएचपी कोड पोस्ट करना चाहता था, क्योंकि मुझे लगता है कि जिस तरह से मैं कॉलम एकत्र करता हूं, वह पिछले उदाहरणों की तुलना में कोड में थोड़ी क्लीनर है। इसके अलावा यह भी दिखाता है कि आप आसानी से फ़ील्ड कैसे बदल सकते हैं, इस स्ट्रिंग को जोड़ने के मामले में। लेकिन आप नए जोड़े गए रिकार्ड के साथ एक विदेशी कुंजी फ़ील्ड भी बदल सकते हैं, अगर आप कुछ बाल रिकॉर्ड भी प्रतिलिपि बनाना चाहते हैं

  // Read columns, unset the PK (always the first field in my case) $stmt = $conn->prepare('SHOW COLUMNS FROM template'); $stmt->execute(); $columns = $stmt->fetchAll(); $columns = array_map(function ($element) { return $element['Field']; }, $columns); unset($columns[0]); // Insert record in the database. Add string COPY to the name field. $sql = "INSERT INTO `template` (".implode(",", $columns).")"; if ($key = array_search('name', $columns)) $columns[$key] = "CONCAT(name, ' COPY')"; $sql .= " SELECT ".implode(",", $columns)." FROM `template` WHERE `id` = ".$id; $stmt = $conn->prepare($sql); $stmt->execute(); 

ऊपर दिखाए गए इस समाधान में चयनित पंक्तियों के लिए भी सही काम करता है। उदाहरण के लिए, मैं अपनी अच्छी 2 कार्यप्रदर्शन के लिए प्रदर्शन पंक्तियां बना रहा हूं, और ये सही काम करता है।

 CREATE TEMPORARY TABLE tmptable SELECT * FROM myTable WHERE id=500; UPDATE tmptable SET id = 0; UPDATE some fields I need to change INSERT INTO myTable SELECT * FROM tmptable; DROP TABLE tmptable; // You can use this same also directly into your code like (PHP Style) $sql = "CREATE TEMPORARY TABLE tmptable SELECT * FROM myTable WHERE id=500; UPDATE tmptable SET id = 0; UPDATE some fields I need to change INSERT INTO myTable SELECT * FROM tmptable;DROP TABLE tmptable;";