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

मैं लेन-देन के रूप में कई SQL क्वेरी कैसे करूं?

आपके शिक्षक लेन-देन की बात कर रहे हैं। अधिकांश रिलेशनल डेटाबेस MySQL* सहित लेनदेन का समर्थन करते हैं। लेनदेन कई सीआरयूडी संचालन के परमाणु व्यवहार की अनुमति देते हैं। इसका मतलब यह है कि अगर एक ऑपरेशन विफल हो जाता है तो डेटाबेस किसी भी बदलाव को वापस ले लेगा जो कि किए गए थे जैसे कि कोई भी ऑपरेशन कभी नहीं हुआ।

ध्यान रखें कि वे क्रमिक रूप से चल रहे हैं , नहीं साथ-साथ। हालांकि, चूंकि वे परमाणु हैं, इसलिए ऐसा लगता है कि यह एक ही ऑपरेशन में सब कुछ चला रहा है।

OleDbConnection सी # का उपयोग कर वर्ग आप अपने कनेक्शन ऑब्जेक्ट से लेनदेन बना सकते हैं, यह मानते हुए कि यह खुला है। हालांकि ध्यान रखें कि एक संग्रहीत प्रक्रिया के विपरीत आपको लेनदेन को मैन्युअल रूप से करने या रोलबैक करने की आवश्यकता होती है।

लेन-देन करने से संचालन का वह सेट डेटाबेस में 'स्थायी' हो जाता है। प्रतिबद्ध होने के बाद इसे वापस नहीं लाया जा सकता है।

रोलबैक तब होता है जब आप डेटाबेस को उस स्थिति में रीसेट करते हैं जो लेनदेन शुरू करने से पहले मौजूद थी।

नीचे एक OleDbConnection ऑब्जेक्ट से लेन-देन करने का एक उदाहरण दिया गया है जिसमें एक प्रतिबद्ध और दो मामले हैं जहां आप रोलबैक करना चाहते हैं:

using(OleDbConnection con = DAL.GetConnection())
{
    OleDbTransaction transaction = null;
    try
    {
        con.Open();
        transaction = con.BeginTransaction()

        string queryString1 = //SQL string
        OleDbCommand cmd1 = new OleDbCommand();
        {
            Connection = con,
            CommandType = CommandType.Text,
            CommandText = queryString1
        };

        string queryString2 = //SQL string
        OleDbCommand cmd2 = new OleDbCommand();
        {
            Connection = con,
            CommandType = CommandType.Text,
            CommandText = queryString2
        };

        int num1 = cmd.ExecuteNonQuery();
        int num2 = cmd.ExecuteNonQuery();

        if (num1 == 0 || num2 == 0)
        {
            //We didn't expect something to return 0, lets roll back
            transaction.Rollback();
            //send error message
            Response.Redirect("register.aspx?err=Error");
        }
        else
        {
             //everything seems good, lets commit the transaction!
             transaction.Commit();
             Session["id"] = MyDB.GetUserId(uname);
             Response.Redirect("home.aspx");
        }
    }
    catch(OleDbException ex)
    {
         try
         {
             //something bad happened, lets roll everything back
             transaction.Rollback();
             Response.Redirect("register.aspx?err=Error");
         }
         catch
         {
             //we don't really care about this catch statement
         }
    }
}

यहां OleDbConnection.BeginTransaction एक सामान्य उदाहरण के साथ विधि जो मैंने ऊपर पोस्ट की है।

संपादित करें :
*जैसा कि @ क्लॉकवर्क-म्यूजियम ने टिप्पणियों में बताया है कि MySQL की लेनदेन का समर्थन करने की क्षमता अंतर्निहित इंजन के उपयोग पर निर्भर करती है। कई MySQL इंजन हैं, लेकिन दो मुख्य हैं InnoDB और MyISAM। InnoDB कर सकते हैं लेन-देन का समर्थन करता है, लेकिन MyISAM नहीं करता है ।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मैं SQL-तालिका में एकाधिक विकल्प मान कैसे सहेज सकता हूं? टेबल कैसी होनी चाहिए?

  2. स्थानीय डेटा लोड करने पर Python2.7 MySQL कनेक्टर त्रुटि

  3. '/var/run/mysqld/mysqld.sock' से कनेक्ट नहीं हो सकता

  4. C# कोड का उपयोग करके MySql डेटाबेस में डेटटाइम कैसे डालें?

  5. भू-स्थानिक क्वेरी को अनुक्रमित करें:किसी स्थान के निकटतम बिंदु खोजें