Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm cách nào để thực hiện nhiều truy vấn SQL dưới dạng giao dịch?

Giáo viên của bạn đang đề cập đến Giao dịch. Hầu hết các cơ sở dữ liệu quan hệ đều hỗ trợ các giao dịch, bao gồm cả MySQL *. Các giao dịch cho phép hành vi nguyên tử của nhiều hoạt động CRUD. Điều này có nghĩa là nếu một thao tác không thành công, cơ sở dữ liệu sẽ khôi phục mọi thay đổi đã được thực hiện như thể chưa có thao tác nào xảy ra.

Hãy nhớ rằng chúng đang chạy tuần tự , không đồng thời. Tuy nhiên, vì chúng là nguyên tử nên cảm giác giống như nó chạy mọi thứ trong một hoạt động duy nhất.

Để chạy giao dịch bằng OleDbConnection bằng cách sử dụng C #, bạn có thể tạo một giao dịch từ đối tượng kết nối của mình, giả sử rằng nó đang mở. Hãy nhớ rằng không giống như với một thủ tục được lưu trữ, bạn cần phải cam kết hoặc khôi phục giao dịch theo cách thủ công.

Cam kết một giao dịch làm cho tập hợp hoạt động đó trở thành 'vĩnh viễn' trong cơ sở dữ liệu. Sau khi cam kết, nó không thể được khôi phục lại.

Hoàn nguyên là khi bạn đặt lại cơ sở dữ liệu về trạng thái đã tồn tại trước khi bắt đầu giao dịch.

Dưới đây là ví dụ về việc tạo giao dịch từ đối tượng OleDbConnection cùng với việc thực hiện cam kết và hai trường hợp bạn có thể muốn khôi phục:

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

Đây là bài viết MSDN về OleDbConnection.BeginTransaction với một ví dụ chung tương tự như những gì tôi đã đăng ở trên.

CHỈNH SỬA :
* Như @ Clockwork-Muse đã chỉ ra trong phần nhận xét Khả năng hỗ trợ giao dịch của MySQL phụ thuộc vào công cụ cơ bản đang được sử dụng. Có nhiều công cụ MySQL, nhưng hai công cụ chính là InnoDB và MyISAM. InnoDB CÓ THỂ hỗ trợ giao dịch, nhưng MyISAM không KHÔNG .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tại sao có thể sử dụng các giá trị chuỗi số để đặt các trường số nguyên trong MySQL và đây có phải là một tính năng sẽ luôn hoạt động không?

  2. MySQL - Làm cách nào để cập nhật cột thập phân để cho phép nhiều chữ số hơn?

  3. khởi tạo mysql bằng cách sử dụng hàm windows api CreateProcessA

  4. tính toán giá giữa các ngày nhất định

  5. Hiểu thống kê HAProxy cho MySQL &PostgreSQL