Tôi không chắc mình hiểu tại sao điều này không phù hợp với kịch bản của bạn. Là TIMESTAMP
được đảm bảo là duy nhất trong MS SQL Server?
Aha - Tôi thấy trong SQL Server dấu thời gian là từ đồng nghĩa với rowversion giống như AUTO_INCREMENT
của MySQL ngoại trừ nó tạo ra một giá trị tăng đơn điệu mới vào UPDATE
cũng như trên INSERT
.
Không, MySQL không có bất cứ thứ gì như thế này. MySQL cũng không hỗ trợ SEQUENCE
đối tượng như Oracle hoặc PostgreSQL hoặc IBM DB2. Ví dụ:một chuỗi sẽ cho phép bạn tạo một giá trị mới từ một trình kích hoạt.
Tôi đã đọc thông tin cập nhật của bạn trong câu hỏi của bạn, vì vậy tôi hiểu vấn đề bạn đang cố gắng giải quyết.
Những gì tôi đã xem như một giải pháp thay thế là thêm một thuộc tính khác trong bảng mà bạn đang xử lý, gọi nó là is_processed
hoặc một cái gì đó. Nhập NULL khi bạn chèn một hàng mới. Khi bạn bắt đầu xử lý nó, hãy thay đổi giá trị trong cột đó thành 1. Sau đó, bạn sẽ luôn biết những hàng nào bạn chưa xử lý - chúng sẽ là những hàng mà is_processed IS NULL
.
Nhận xét lại của bạn:Được rồi, tôi thấy vấn đề. Mỗi người dùng cần cái nhìn riêng của họ về những hàng nào là hàng mới / đã thay đổi.
Một cách hack khác mà tôi đã thấy được sử dụng trong MySQL để mô phỏng một đối tượng chuỗi là một bảng có chứa khóa chính tự động tăng và không có gì khác. Bạn có thể tạo các giá trị tăng đơn điệu duy nhất mới bằng cách chèn vào bảng này, sau đó cuộn lại phần chèn.
CREATE TABLE sequence (id SERIAL) ENGINE=InnoDB; -- Must be InnoDB
START TRANSACTION;
INSERT INTO sequence () VALUES (); -- Yes this is a legal statement.
ROLLBACK;
SELECT LAST_INSERT_ID();
Bạn không thể bắt đầu và khôi phục các giao dịch trong trình kích hoạt MySQL, vì vậy bạn sẽ phải tạo các giá trị mới trong mã ứng dụng của mình.
Hoặc nếu không, bạn có thể chuyển sang PostgreSQL và nhận được hỗ trợ thực sự cho các chuỗi.