插入每个外键插入主键

时间:2017-08-09 23:49:09

标签: postgresql

在下表中,影片表是显示表的子类。 对于插入(通过网络界面)表格节目的每一个新行,我想在电影中插入一行: 例如,

INSERT INTO shows title VALUES ('title');

这将在节目中添加一个新行,其中 showid =下一个值,并且title =' title' ... 我想要的是获得 showid 值(来自节目)并将其插入电影表中的新行。

我该怎么做?

CREATE SEQUENCE shows_showid_seq;
CREATE TABLE "shows" (
    "showid" BIGINT NOT NULL PRIMARY KEY DEFAULT nextval('shows_showid_seq'),
    "title" TEXT NOT NULL,
    "rating" BIGINT,
    "language" TEXT,
    "genre" TEXT
    );

CREATE TABLE "films" (
    "showid" BIGINT NOT NULL CONSTRAINT films_showid
    REFERENCES shows("showid") ON DELETE SET NULL,
    "year" INT, "reldate" DATE
    );

2 个答案:

答案 0 :(得分:0)

因此,如果我正确理解了您的问题,那么您希望在插入节目后自动插入电影。

所以你首先要做的是写一个FUNCTION来处理插入操作(参考:https://www.postgresql.org/docs/9.1/static/sql-createfunction.html

然后写一个TRIGGER,在给定事件发生时执行该函数(参考:https://www.postgresql.org/docs/9.1/static/sql-createtrigger.html

引用另一个包含函数示例的帖子How to insert data into table using stored procedures in postgresql

另一个SO参考更全面,包括一个TRIGGER和一个FUNCTION,Postgresql: Creating a Trigger

这应该足以帮助你拼凑一些东西。即将走出家门,否则我会四处游玩并写出来,我当然可以使用这种做法。但我希望这足以帮助你朝着正确的方向前进。

答案 1 :(得分:0)

这是我最终做的事情:

arguments[i]

要插入我投放的新电影:CREATE FUNCTION add_movie(movie_title TEXT, movie_overview TEXT) RETURNS void LANGUAGE plpgsql AS $$ DECLARE current_showid BIGINT; BEGIN INSERT INTO shows (title, overview) VALUES (movie_title, movie_overview) RETURNING showid INTO current_showid; INSERT INTO films (showid) VALUES (current_showid); END; $$;