Có và Không :-)
Trong cả hai trường hợp, quyền truy cập được tuần tự hóa (giả sử bạn đang sử dụng một công cụ giao dịch như InnoDB) vì chúng đạt cùng một hàng, vì vậy chúng sẽ không ảnh hưởng đến nhau. Nói cách khác, các câu lệnh là nguyên tử.
Tuy nhiên, số lượng hàng bị ảnh hưởng thực sự phụ thuộc vào cấu hình của bạn được đặt khi bạn mở kết nối. trang cho mysql_affected_rows () có điều này để nói (chữ in đậm của tôi):
Và từ trang mysql_real_connect :
Vì vậy, về những gì xảy ra với CLIENT_FOUND_ROWS
đang được định cấu hình, các hàng bị ảnh hưởng cho:
UPDATE T1 SET C1 = 'dirty' WHERE id = 1
có không có gì liên quan đến việc dữ liệu có bị thay đổi hay không, chỉ những hàng nào phù hợp. Đây sẽ là 1 cho cả hai truy vấn.
Mặt khác, nếu CLIENT_FOUND_ROWS
đã không đặt, truy vấn thứ hai sẽ không thực sự thay đổi hàng (vì nó đã được điền bằng 'dirty') và sẽ có số hàng bằng không.
Nếu bạn muốn giống nhau hành vi bất kể cài đặt đó như thế nào (chỉ hiển thị các thay đổi), bạn có thể sử dụng một cái gì đó như:
UPDATE T1 SET C1 = 'dirty' WHERE id = 1 AND C1 <> 'dirty'