Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menjana Susunan dalam PostgreSQL Menggunakan Urutan dan Pencetus?
Artikel ini memperincikan cara menjana urutan dalam PostgreSQL menggunakan jujukan dan pencetus. Senario ini melibatkan jadual dengan kunci utama komposit (id, seq), yang memerlukan penyelesaian tersuai untuk mencipta urutan unik bagi setiap id
.
Penyelesaian melibatkan mencipta dua jadual dan melaksanakan pencetus:
Struktur Jadual:
id
sebagai kunci utama.id
(rujukan kunci asing things
), seq
(nombor susulan) dan notes
. Kunci utama ialah gabungan id
dan seq
.Pencetus dan Fungsi:
things
pencetus jadual (make_thing_seq
): Pencetus ini dilaksanakan selepas setiap sisipan ke dalam jadual things
. Ia mencipta jujukan baharu bernama thing_seq_{id}
untuk setiap id
baharu.
stuff
pencetus jadual (fill_in_stuff_seq
): Pencetus ini dilaksanakan sebelum setiap sisipan ke dalam jadual stuff
. Ia mendapatkan semula nilai seterusnya daripada jujukan yang sesuai (thing_seq_{id}
) berdasarkan id
yang disisipkan dan menetapkannya pada lajur seq
.
Contoh Pelaksanaan:
Kod berikut menunjukkan penciptaan jadual dan pelaksanaan pencetus:
<code class="language-sql">-- Create the tables CREATE TABLE things ( id serial primary key, name text ); CREATE TABLE stuff ( id integer references things, seq integer NOT NULL, notes text, primary key (id, seq) ); -- Trigger in things table to create new sequences CREATE OR REPLACE FUNCTION make_thing_seq() RETURNS trigger LANGUAGE plpgsql AS $$ begin EXECUTE format('CREATE SEQUENCE IF NOT EXISTS thing_seq_%s', NEW.id); -- Added IF NOT EXISTS RETURN NEW; end; $$; CREATE TRIGGER make_thing_seq AFTER INSERT ON things FOR EACH ROW EXECUTE PROCEDURE make_thing_seq(); -- Trigger in stuff table to use correct sequence CREATE OR REPLACE FUNCTION fill_in_stuff_seq() RETURNS trigger LANGUAGE plpgsql AS $$ begin NEW.seq := nextval(format('thing_seq_%s', NEW.id)); RETURN NEW; end; $$; CREATE TRIGGER fill_in_stuff_seq BEFORE INSERT ON stuff FOR EACH ROW EXECUTE PROCEDURE fill_in_stuff_seq();</code>
Persediaan ini memastikan bahawa memasukkan data ke dalam things
dan stuff
secara automatik menjana urutan unik untuk setiap id
, mengekalkan integriti kunci utama komposit. Klausa IF NOT EXISTS
telah ditambahkan pada fungsi make_thing_seq
untuk mengelakkan ralat jika urutan untuk ID tertentu sudah wujud.
Atas ialah kandungan terperinci Bagaimana untuk Menjana Susunan dalam PostgreSQL Menggunakan Urutan dan Pencetus?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!