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

Cách kiểm tra trong thời gian thực nếu hàng mới đã được thêm vào bảng MySQL

Nếu bảng của bạn là MyISAM, tôi sẽ bám sát ý tưởng ban đầu của bạn. Lấy số hàng từ bảng MyISAM ngay lập tức. Nó chỉ đọc một giá trị duy nhất vì MyISAM luôn duy trì số lượng hàng.

Với InnoDB, cách làm này vẫn có thể chấp nhận được. Giả sử car_table.id là khóa chính, SELECT COUNT(id) FROM car_table chỉ yêu cầu quét chỉ mục, rất nhanh. Bạn có thể cải thiện ý tưởng này bằng cách thêm một cột boolean được lập chỉ mục khác vào bảng của mình:

ALTER car_table ADD COLUMN checked BOOLEAN NOT NULL DEFAULT 0, ADD INDEX (checked);

Giá trị mặc định đảm bảo ô tô mới sẽ được chèn với cờ này được đặt thành 0 mà không cần sửa đổi câu lệnh chèn. Sau đó:

BEGIN TRANSACTION; -- make sure nobody interferes
SELECT COUNT(checked) FROM car_table WHERE checked = FALSE FOR UPDATE; -- this gets you the number of new, unchecked cars
UPDATE car_table SET checked = TRUE WHERE checked = FALSE; -- mark these cars as checked
COMMIT;

Bằng cách này, bạn chỉ quét một số lượng rất nhỏ các mục nhập chỉ mục tại mỗi cuộc thăm dò ý kiến.

Một cách tiếp cận nâng cao hơn bao gồm thêm ID ô tô mới tạo vào một bảng bên, thông qua một trình kích hoạt. Bảng phụ này được quét thường xuyên, không khóa bảng chính và không thay đổi cấu trúc của nó. Chỉ cần TRUNCATE bảng phụ này sau mỗi cuộc thăm dò ý kiến.

Cuối cùng, có tùy chọn kích hoạt UDF, theo đề xuất của Panagiotis, nhưng điều này dường như là quá mức cần thiết trong hầu hết các tình huố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. java.sql.SQLException:Giá trị đối số không hợp lệ:java.io.NotSerializableException

  2. Tạo danh sách có thể lọc bằng truy vấn Laravel và Eloquent

  3. Cơ sở dữ liệu:Một bảng cho mỗi ngôn ngữ hoặc một bảng với một cột ngôn ngữ

  4. Truy vấn xếp hạng nhóm PHP MYSQL

  5. Làm thế nào để kết nối nhiều cơ sở dữ liệu, máy chủ trong mysql và truy vấn từ cả hai bảng của nhau?