Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да направя много SQL заявки като транзакции?

Вашият учител има предвид транзакциите. Повечето релационни бази данни поддържат транзакции, включително MySQL*. Транзакциите позволяват атомарно поведение на множество CRUD операции. Това означава, че ако една операция е неуспешна, базата данни ще отмени всички промени, които са били направени, сякаш нито една от операциите не се е случила.

Имайте предвид, че те работят последователнопоред , не едновременно. Въпреки това, тъй като те са атомни, усещането е подобно на това, че изпълнява всичко в една операция.

За да изпълните транзакция с помощта на OleDbConnection клас, използвайки C#, можете да създадете транзакция от вашия обект за връзка, ако приемем, че е отворен. Имайте предвид обаче, че за разлика от съхранената процедура трябва ръчно да извършите или върнете транзакцията.

Извършването на транзакция прави този набор от операции „постоянен“ в базата данни. След извършване не може да бъде върнат назад.

Връщане назад е, когато нулирате базата данни до състоянието, което е съществувало преди стартиране на транзакцията.

По-долу е даден пример за създаване на транзакция от обект 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
         }
    }
}

Ето статията в MSDN за OleDbConnection.BeginTransaction метод с общ пример, подобен на това, което публикувах по-горе.

РЕДАКТИРАНЕ :
*Както @Clockwork-Muse посочи в коментарите, способността на 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. MySQL 5 остави неизвестна колона за присъединяване

  2. Проверете дали mysql база данни съществува, извършете действие въз основа на резултата

  3. SQLDependency върху база данни MariaDB/MySQL

  4. Как да намеря комбинации от редове>колони с Cross Join? [SQL]

  5. WAMP сървърът е в зелено, но получавате само 404