Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak wykonać wiele zapytań SQL jako transakcje?

Twój nauczyciel odnosi się do Transakcji. Większość relacyjnych baz danych obsługuje transakcje, w tym MySQL*. Transakcje umożliwiają atomowe zachowanie wielu operacji CRUD. Oznacza to, że jeśli jedna operacja się nie powiedzie, baza danych cofnie wszystkie wprowadzone zmiany, tak jakby żadna z operacji nigdy nie wystąpiła.

Pamiętaj, że działają sekwencyjnie , nie jednocześnie. Jednak ponieważ są one atomowe, wydaje się, że wszystko działa w jednej operacji.

Aby uruchomić transakcję przy użyciu OleDbConnection za pomocą C# możesz utworzyć transakcję z obiektu połączenia, zakładając, że jest on otwarty. Pamiętaj jednak, że w przeciwieństwie do procedury składowanej, musisz ręcznie zatwierdzić lub wycofać transakcję.

Zatwierdzenie transakcji sprawia, że ​​ten zestaw operacji staje się „trwały” w bazie danych. Po zatwierdzeniu nie można go cofnąć.

Wycofanie ma miejsce, gdy zresetujesz bazę danych do stanu, który istniał przed rozpoczęciem transakcji.

Poniżej znajduje się przykład tworzenia transakcji z obiektu OleDbConnection wraz z wykonaniem zatwierdzenia i dwóch przypadków, w których możesz chcieć wycofać:

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
         }
    }
}

Oto artykuł MSDN na temat OleDbConnection.BeginTransaction metoda z ogólnym przykładem podobnym do tego, który opublikowałem powyżej.

EDYTUJ :
*Jak @Clockwork-Muse wskazał w komentarzach, zdolność MySQL do obsługi transakcji zależy od używanego silnika. Istnieje wiele silników MySQL, ale dwa główne to InnoDB i MyISAM. InnoDB MOŻE obsługuje transakcje, ale MyISAM NIE .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Grupuj wiersze co 7 dni, zaczynając od określonej daty

  2. Jak przeprowadzić migrację bazy danych SQL Server do MySQL?

  3. Eksportowanie bazy danych MySQL z XAMPP

  4. Jak znormalizować wartości oddzielone przecinkami w kolumnie tabeli, a następnie uruchomić zapytanie?

  5. problemy z OneToMany zawierające klauzulę filtrującą w wiosennym jpa