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

Các câu lệnh mysql đơn có phải là nguyên tử trong MyISAM và InnoDB không?

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

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'


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách tắt Chế độ nghiêm ngặt của MySQL

  2. Làm cách nào để thực hiện chèn hàng loạt trong mySQL bằng node.js

  3. Làm cách nào để lưu trữ ảnh trong MySQL?

  4. Cách chèn dữ liệu vào mysql bằng Java

  5. Làm thế nào để chọn các cặp riêng biệt trong MySQL tham gia (cùng một bảng) với độ nhạy?