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

Điểm để bao gồm các câu lệnh được chọn trong một giao dịch là gì?

Bạn nói đúng:ở mức cách ly tiêu chuẩn , read committed , bạn không cần phải bọc các câu lệnh đã chọn trong các giao dịch. Các câu lệnh được chọn sẽ được bảo vệ khỏi các lần đọc bẩn cho dù bạn có gói chúng trong một giao dịch hay không.

connection 1:                          connection 2:

                                       begin transaction
                                       update user set name = 'Bill' where id = 1
select name from users where id = 1
                                       rollback transaction

Câu lệnh select sẽ không đọc bản cập nhật quay lại:không quan trọng là chúng không được bao bọc trong một giao dịch.

Nếu bạn cần lần đọc có thể lặp lại , sau đó gói các lựa chọn trong một giao dịch mặc định không giúp ích gì:

connection 1:                          connection 2:

begin transaction
select name from users where id = 1
                                       update user set name = 'Bill' where id = 1
select name from users where id = 1
commit transaction

begincommit câu lệnh sẽ không hữu ích ở đây:select thứ hai có thể đọc tên cũ hoặc có thể đọc tên mới.

Tuy nhiên, nếu bạn chạy ở mức cách ly cao hơn, chẳng hạn như serializable hoặc repeatable read , nhóm sẽ được bảo vệ khỏi các lần đọc không lặp lại:

connection 1:                          connection 2:

set transaction isolation level
    repeatable read
begin transaction
select name from users where id = 1
                                       update user set name = 'Bill' where id = 1
select name from users where id = 1              |
commit transaction                               |
                                                 |--> executed here

Trong trường hợp này, update sẽ chặn cho đến khi giao dịch đầu tiên hoàn tất.

Mức độ cách ly cao hơn hiếm khi được sử dụng vì chúng làm giảm số lượng người có thể làm việc trong cơ sở dữ liệu cùng một lúc. Ở cấp cao nhất, serializable , một truy vấn báo cáo sẽ tạm dừng mọi hoạt động cập nhật.



  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-SQL lấy số ngày làm việc giữa 2 ngày

  2. Gọi thủ tục được lưu trữ từ php codeigniter

  3. Cách giải quyết Lỗi 26:Lỗi Định vị Máy chủ / Phiên bản Được chỉ định trong môi trường sản xuất?

  4. Làm thế nào để chuyển đổi từ định dạng ngày này sang định dạng ngày khác, trong máy chủ Microsoft SQL?

  5. Làm thế nào để loại bỏ bất kỳ số cuối cùng nào khỏi một chuỗi?