집 >데이터 베이스 >MySQL 튜토리얼 >트리거를 사용하여 다른 열에 종속되는 PostgreSQL 시퀀스를 만드는 방법은 무엇입니까?
다른 열을 기반으로 한 PostgreSQL 시퀀스
PostgreSQL에서는 트리거를 통해 다른 열에 의존하는 시퀀스를 생성할 수 있습니다. 다음 테이블 구조를 고려하십시오.
列名 | 数据类型 | 说明 |
---|---|---|
id | integer | 主键,外键关联其他表 |
seq | integer | 每个ID都有其自身的seq编号 |
data | text | 一些文本数据,与序列无关 |
id seq는 결합된 고유 키를 구성합니다.
예상한 결과를 얻으려면 things와 stuff라는 두 개의 테이블을 만들어야 합니다.
테이블 만들기:
<code class="language-sql">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) );</code>
시퀀스 트리거 생성:
사물 테이블에 트리거를 설정하여 삽입된 데이터의 각 행에 대해 새 시퀀스를 생성합니다.
<code class="language-sql">CREATE FUNCTION make_thing_seq() RETURNS trigger LANGUAGE plpgsql AS $$ begin execute format('create sequence thing_seq_%s', NEW.id); return NEW; end $$; CREATE TRIGGER make_thing_seq AFTER INSERT ON things FOR EACH ROW EXECUTE PROCEDURE make_thing_seq();</code>
채우기 시퀀스 트리거:
마지막으로, 각 삽입에 올바른 순서를 사용하여 stuff 테이블에 트리거를 만듭니다.
<code class="language-sql">CREATE FUNCTION fill_in_stuff_seq() RETURNS trigger LANGUAGE plpgsql AS $$ begin NEW.seq := nextval('thing_seq_' || 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>
데모:
things 및 stuff 테이블에 삽입된 데이터는 해당 시퀀스를 생성하고 사용합니다. 예:
<code class="language-sql">insert into things (name) values ('Joe'); insert into things (name) values ('Bob'); insert into stuff (id, notes) values (1, 'Keychain'); insert into stuff (id, notes) values (1, 'Pet goat'); insert into stuff (id, notes) values (2, 'Family photo'); insert into stuff (id, notes) values (1, 'Redundant lawnmower');</code>
결과는 다음과 같습니다.
<code>| id | seq | notes | |---|---|---| | 1 | 1 | Keychain | | 1 | 2 | Pet goat | | 2 | 1 | Family photo | | 1 | 3 | Redundant lawnmower |</code>
이 접근 방식은 things 테이블의 id 열을 기반으로 시퀀스를 효과적으로 생성하여 각 ID에 대해 고유한 시퀀스가 생성되도록 합니다.
위 내용은 트리거를 사용하여 다른 열에 종속되는 PostgreSQL 시퀀스를 만드는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!