Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana cara melakukan banyak kueri SQL sebagai transaksi?

Guru Anda mengacu pada Transaksi. Sebagian besar database relasional mendukung transaksi, termasuk MySQL*. Transaksi memungkinkan perilaku atom dari beberapa operasi CRUD. Ini berarti bahwa jika satu operasi gagal, database akan mengembalikan semua perubahan yang dibuat seolah-olah tidak ada operasi yang pernah terjadi.

Ingatlah bahwa mereka berjalan berurutan , tidak serentak. Namun, karena mereka atom, rasanya mirip dengan menjalankan semuanya dalam satu operasi.

Untuk menjalankan transaksi menggunakan OleDbConnection kelas menggunakan C# Anda dapat membuat transaksi dari objek koneksi Anda, dengan asumsi bahwa itu terbuka. Perlu diingat bahwa tidak seperti prosedur tersimpan, Anda perlu melakukan atau mengembalikan transaksi secara manual.

Melakukan transaksi membuat rangkaian operasi itu 'permanen' ke database. Setelah melakukan itu tidak dapat dibatalkan.

Rollback adalah saat Anda mereset database ke status yang ada sebelum memulai transaksi.

Di bawah ini adalah contoh membuat transaksi dari objek OleDbConnection bersama dengan melakukan komit dan dua kasus di mana Anda mungkin ingin melakukan rollback:

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

Berikut artikel MSDN di OleDbConnection.BeginTransaction metode dengan contoh umum yang mirip dengan apa yang saya posting di atas.

EDIT :
*Seperti yang ditunjukkan oleh @Clockwork-Muse dalam komentar, kemampuan MySQL untuk mendukung transaksi bergantung pada mesin dasar yang digunakan. Ada banyak mesin MySQL, tetapi dua yang utama adalah InnoDB dan MyISAM. InnoDB BISA mendukung transaksi, tetapi MyISAM TIDAK .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengakses output prosedur tersimpan MySQL di Zend Framework 2

  2. MySQL INNER GABUNG Alias

  3. Apakah ada cara yang lebih efisien untuk membuat pagination di Hibernate daripada menjalankan kueri pilih dan hitung?

  4. Tabel terlalu lebar untuk muat dalam PDF yang dihasilkan penurunan harga

  5. Cara menyimpan hasil MySQL ke file dalam format tabel