一次插入多个相关表并返回id,如果存在,则插入多个表

时间:2016-10-01 08:32:02

标签: database postgresql

我是SQL / PostgreSQL的新手。如果满足某些条件,我想立即插入多个相关表,否则返回表的现有id。让我举一个例子,以下是我的示范表。

CREATE TABLE profile (
    id serial NOT NULL,
    first_name VARCHAR NOT NULL,
    last_name VARCHAR NOT NULL,
    PRIMARY KEY (id)
)

CREATE TABLE movies (
    movied_id serial NOT NULL,
    movie_name VARCHAR NOT NULL,
    profile_id INTEGER NOT NULL,    
    PRIMARY KEY (movie_id),
    FOREIGN KEY (profile_id) REFERENCES profile.id  
)

CREATE TABLE sports (
    sport_id serial NOT NULL,
    sport_name VARCHAR NOT NULL,
    profile_id INTEGER NOT NULL,    
    PRIMARY KEY (sport_id),
    FOREIGN KEY (profile_id) REFERENCES profile.id  
)

CREATE TABLE visited_countries (
    country_name VARCHAR NOT NULL,
    profile_id INTEGER NOT NULL,    
    PRIMARY KEY (country_name),
    FOREIGN KEY (profile_id) REFERENCES profile.id  
)

此处,配置文件表包含id,first_name,last_name,它与电影,体育,visited_countries表相关。配置文件表和所有其他表之间存在一对多关系(外键也显示在表中)。鉴于这种情况:

  1. 我想先通过获取唯一的配置文件ID,然后将其作为FK用于所有其他表,一次性插入所有这些表中。

  2. 我想在插入所有内容之前检查以下内容。 - first_name,last_nane以及profile id看到的所有电影,体育,visited_countries应该是不同的,只有我将使用生成的配置文件ID在订单中一次插入所有这些表,否则只返回配置文件ID。

  3. 我有多个客户同时写入表格,所以我想一次锁定并执行此交易。

  4. 我使用CTE阅读了几件事,但无法使其正常工作。任何建议和系统的方法来做这件事都会有所帮助。

0 个答案:

没有答案