Saya tidak yakin saya mengerti mengapa ini tidak berhasil untuk skenario Anda. Apakah TIMESTAMP
dijamin unik di MS SQL Server?
Aha -- Saya melihat di SQL Server stempel waktu adalah sinonim untuk rowversion yang seperti AUTO_INCREMENT
MySQL kecuali itu menghasilkan nilai baru yang meningkat secara monoton pada UPDATE
serta pada INSERT
.
Tidak, MySQL tidak memiliki yang seperti ini. MySQL juga tidak mendukung SEQUENCE
objek seperti Oracle atau PostgreSQL atau IBM DB2. Urutan akan memungkinkan Anda untuk menghasilkan nilai baru dari pemicu, misalnya.
Saya membaca info terbaru Anda dalam pertanyaan Anda, jadi saya memahami masalah yang Anda coba selesaikan.
Apa yang saya lihat sebagai solusi alternatif adalah menambahkan atribut lain di tabel yang sedang Anda proses, sebut saja is_processed
atau sesuatu. Masukkan NULL saat Anda menyisipkan baris baru. Saat Anda mulai memprosesnya, ubah nilai di kolom itu menjadi 1. Kemudian Anda akan selalu tahu baris mana yang belum Anda proses -- baris tersebut akan menjadi baris di mana is_processed IS NULL
.
Re komentar Anda:Oke, saya melihat masalahnya. Setiap pengguna membutuhkan pandangan mereka sendiri tentang baris mana yang baru/diubah.
Peretasan lain yang saya lihat digunakan di MySQL untuk mensimulasikan objek urutan adalah tabel yang berisi kunci utama peningkatan otomatis dan tidak ada yang lain. Anda dapat menghasilkan nilai unik baru yang meningkat secara monoton dengan menyisipkan ke dalam tabel ini, lalu memutar kembali sisipan.
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();
Anda tidak dapat memulai dan mengembalikan transaksi dalam pemicu MySQL, jadi Anda harus membuat nilai baru dalam kode aplikasi Anda.
Atau Anda dapat beralih ke PostgreSQL, dan mendapatkan dukungan nyata untuk sequence.