2015-07-10 5 views
6

द्वारा किया जाएगा, मैं एक सी ++ एप्लिकेशन लिख रहा हूं जो डेटाबेस से कनेक्ट करने के लिए MySQL C API का उपयोग करता है। MySQL सर्वर संस्करण 5.6.19-लॉग है।MySQL लेनदेन को कैसे शुरू किया जाए जो mysql_commit()

मुझे एक लेनदेन में कई SQL UPDATE, INSERT और DELETE कथन चलाने की आवश्यकता है ताकि यह सुनिश्चित किया जा सके कि या तो सभी परिवर्तन या कोई परिवर्तन लागू नहीं हैं।

मैं डॉक्स कार्यों mysql_commit() और mysql_rollback() कि लेन-देन (यह प्रतिबद्ध या इसे वापस रोल) खत्म में पाया है, लेकिन उस एक सौदे शुरू होता है मैं एक इसी समारोह नहीं मिल रहा।

क्या ऐसा कोई कार्य है? क्या मुझसे साफ़ - साफ़ कुछ चीज़ चूक रही है?


मैं mysql_real_query() समारोह का उपयोग कर UPDATE, INSERT और DELETE बयान चलाते हैं।

मुझे लगता है कि मैं उसी mysql_real_query() फ़ंक्शन का उपयोग करके START TRANSACTION SQL कथन चलाकर लेनदेन शुरू करने में सक्षम होना चाहिए। तो मुझे उसी mysql_real_query() फ़ंक्शन का उपयोग करके COMMIT SQL कथन चलाकर लेनदेन करने में सक्षम होना चाहिए।

लेकिन फिर, एपीआई में mysql_commit() और mysql_rollback() कार्यों को समर्पित करने का क्या मतलब है?

+1

"लेन-देन शुरू" करने के लिए आप 'निष्क्रिय करने के लिए autocommit' जरूरत है (MySQL aways एक सौदे सक्रिय है, लेकिन प्रत्येक कथन के बाद डिफ़ॉल्ट रूप से यह करता है)। ऐसा करने के लिए [कई तरीकों] (https://dev.mysql.com/doc/refman/5.7/en/commit.html) हैं, आपके लिए सबसे सुविधाजनक चुनें। – Vatev

+1

@Vatev, क्या आप कह रहे हैं कि लेनदेन शुरू करने के लिए 'MySQL C API' फ़ंक्शन ['mysql_autocommit()'] (https://dev.mysql.com/doc/refman/5.6/en/mysql-autocommit है। एचटीएमएल) पैरामीटर 'मोड = 0' के साथ? खैर, यह 'स्टार्ट ट्रांज़ेक्शन' कथन चलाने के समान नहीं है। मैं एपीआई में एक फंक्शन 'mysql_commit() 'देखता हूं और एपीआई में एक संबंधित फ़ंक्शन' mysql_start_transaction()' की अपेक्षा करता है, लेकिन ऐसा लगता है कि ऐसा कोई फ़ंक्शन नहीं है ... –

+2

'स्टार्ट ट्रांसलेशन' और सेटिंग का उपयोग करने के बीच अंतर autocommit यह है कि 'स्टार्ट ट्रांसलेशन' इसे अगले 'COMMIT' या' रोलबैक 'तक ही अक्षम करता है। – Vatev

उत्तर

0
//connect to mysql server: 
MYSQL *mysql = mysql_init(NULL); 
mysql = mysql_real_connect(mysql, ......) 

//turn off auto_commit 
mysql_autocommit(mysql , false); 

या

//start a tranaction directly as follows 
mysql_real_query(mysql,"BEGIN"); 

//run your commands: 
mysql_real_query(mysql,"UPDATE..."); 

//commit your transaction 
mysql_real_query(mysql, "COMMIT"); 
संबंधित मुद्दे