在INSERT于处于连接表的表INSERT数据(On INSERT to a table INSER

2019-10-16 14:36发布

我有有一个名为列两个表id_user共同点。 这两个表在某些时候我的Drupal的网页创建(我不知道,因为我没有创建NetBeans项目)。

我在网上查了,发现很可能通过增加REFERENCES 1sttable (id_user)到第二个表,它应该在的值复制1sttable (当一个新的用户到达时总是创建)的id_user的价值2ndtable (我不知道在其中创建点)。 这是正确的吗?

如果它不正确,我想知道在pgAdmin的一种方式,可以让我同步这些表,或者在同一时刻至少创建他们两个。

我的问题是,新用户对新行1sttable自动只要他注册,同时获得一个新行2ndtable它需要某种形式的“激活”,如插入的所有数据。 我正在寻找的是,一旦出现在新行的方式1sttable ,它会自动创建在其他表中的新行了。 我不知道如何使它更清晰(英语不是我的母语)。

你给我的解决方案似乎很明显的问题,但问题是有点大:两个表呈现出不同类型的变量,它应该是他们,一个在MySQL中,与用户数据(用户Drupal的默认设置) ,然后我有2个在PostgreSQL中,都具有相同的主键(id_user):

  • 第一个有118列,其中大部分真正的整数;
  • 第二个有50列,混合类型。

Web应用程序我使用的需要,在此列的所有非空(否则我得到一个NullPointerException)工作的价值,所以我正在寻找的(我认为):

当用户注册-inserting他在Drupal的电子邮件 - ,自动创建两个应验列,使网络自动只要电子邮件存储在MySQL的工作。 可能吗? 难道是很好的解释?

我的环境是:

  • Windows Server 2008企业版
  • GlassFish的2.1
  • NetBeans的6.7.1
  • Drupal的6.17
  • PostgreSQL的8.4
  • MySQL的48年5月1日

Answer 1:

pgAdmin的仅仅是GUI。 你的意思是PostgreSQL的 ,在RDBMS 。

一个外键约束 ,就像你只有强制,没有值可以使用,即不存在被引用的列。 您可以使用ON UPDATE CASCADEON DELETE CASCADE传播从引用的列改变,但像你描述你不能使用它创建新行 。 你得到了错误的工具。

什么你描述可以用一个来实现触发 。 另一个更复杂的方式将是一个RULE 。 走在这里的触发器。

在PostgreSQL里,你需要一个触发功能 ,大都采用PLPGSQL和触发 ,使得使用它在桌子上。

就像是:

CREATE OR REPLACE FUNCTION trg_insert_row_in_tbl2()
  RETURNS trigger AS
$func$
BEGIN
   INSERT INTO tbl2 (my_id, col1)
   VALUES (NEW.my_id, NEW.col1)     -- more columns?

   RETURN NEW;  -- doesn't matter much for AFTER trigger
END
$func$  LANGUAGE plpgsql;

并触发AFTER INSERTtbl1

CREATE TRIGGER insaft
AFTER INSERT ON tbl1
FOR EACH ROW EXECUTE PROCEDURE trg_insert_row_in_tbl2();


Answer 2:

你可能想了解使用Drupal的钩子添加额外的代码,当用户登录时运行。 一旦你知道如何使用钩子,你可以编写代码(模块)在第二个表中插入相应的记录。 一个好的候选人钩用在这里是为Drupal 6 hook_user或hook_user_insert为Drupal 7 。

你读了参考有关是一个SQL命令定义的一部分外键约束从第二表到第一。 这不是解决你的问题绝对必要的,但它可以让你的数据库保持一致的帮助。 我建议你对数据库结构和约束,如果您想了解更多关于这个话题读了。



文章来源: On INSERT to a table INSERT data in connected tables