Trong câu lệnh update chỉ set mới 1 thuộc tính, thì các thuộc tính khác có được giữ nguyên không?


chào mọi người, mình đang thắc mắc 1 vấn đề như này:
không cần xét đến chế độ hiện đang là read uncommited hay read commited vì theo mình nó không ảnh hưởng đến tình huống này.
giả sử có 1 row gồm 3 thuộc tính: (tên, tỉnh, điểm), T1 và T2 đến cùng thời điểm, T1 đọc bản ghi lấy ra : An, Hanoi, 10, T2 cũng đọc dc bản ghi lấy ra: An, Hanoi, 10.
T1, ngay sau đó update : set tỉnh=HaiPhong, rồi commit luôn.
T2 một lúc sau update: set điểm= 20, sau đó mới commit.
cho mình hỏi lúc này thì thằng T2 nó chỉ can thiệp vào thuộc tính point thành 20, còn các thuộc tính khác nó không can thiệp, vậy thì sau cùng ở DB nó sẽ lưu là : An, Hai Phong, 20 hay lưu An, Hanoi, 20 vậy?

mình nghĩ là hp,20 , nếu không khóa trên hàng hay trên bảng thì thằng nào write trước thì nó cập nhật vào trước, thằng sau thì write sau

“Hải Phòng, 20” nên là kết quả. Tớ nghĩ cậu nên dễ dàng test được trên mysql chứ? :sweat_smile:
Về cơ bản:

  • Khi 2 transaction cùng update 1 record, transaction vào trước sẽ lock record đó lại, update, xong nhả lock để cho các transaction khác update.
  • Câu lệnh update không có bị ảnh hưởng bởi kết quả của câu select trước đó ở transaction.

Hope it helps!

2 Likes

Thanks, cái này sao dễ quên quá nhỉ, giờ e đọc lại đề bài còn ko hiểu trước đó mk hỏi gì nữa, nhanh quên kiến thức quá

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?