ID rekod yang ditambah secara automatik dalam MySQL menyediakan mekanisme asas untuk menjana pengecam unik. Walau bagaimanapun, untuk senario yang memerlukan fleksibiliti urutan Oracle, penyelesaian tersuai diperlukan.
Butiran Pelaksanaan:
CREATE FUNCTION get_next_sequence(sequence_name VARCHAR(255)) RETURNS INT BEGIN DECLARE next_sequence INT; START TRANSACTION; UPDATE sequences SET next_sequence = next_sequence + 1 WHERE sequence_name = sequence_name FOR UPDATE; SELECT next_sequence INTO next_sequence FROM sequences WHERE sequence_name = sequence_name; COMMIT; RETURN next_sequence; END
CREATE FUNCTION get_current_sequence(sequence_name VARCHAR(255)) RETURNS INT BEGIN DECLARE current_sequence INT; SELECT next_sequence INTO current_sequence FROM sequences WHERE sequence_name = sequence_name; RETURN current_sequence; END
Contoh Penggunaan:
-- Obtain the next sequence number for the "OrderNumber" sequence SELECT get_next_sequence('OrderNumber') AS next_order_number; -- Get the current value of the "InvoiceNumber" sequence SELECT get_current_sequence('InvoiceNumber') AS current_invoice_number;
Nota:
Penyelesaian ini menggunakan kunci baris tunggal pada jadual jujukan untuk mengelakkan isu konkurensi. Pendekatan alternatif, seperti menggunakan prosedur tersimpan dengan pernyataan COMMIT dan ROLLBACK yang jelas, juga boleh digunakan untuk mencapai gelagat yang diingini.
Atas ialah kandungan terperinci Bagaimana untuk Mensimulasikan Urutan Oracle dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!