在INSERT中连接表中的INSERT数据

时间:2012-04-12 07:08:27

标签: postgresql drupal netbeans triggers pgadmin

我有两个表共有一个名为id_user的列。这两个表是在我的Drupal网页上创建的(我不知道因为我没有创建Netbeans项目)。

我在互联网上查了一下,发现可能通过将REFERENCES 1sttable (id_user)添加到第二个表,它应该将1sttable的值(当新用户到达时始终创建)复制到{ {1}} id_user的值(我不知道在哪个点创建)。这是对的吗?

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

我遇到的问题是,新用户在注册后会自动在2ndtable上有一个新行,而在1sttable上获得新行则需要某种“激活”状态插入所有数据。我正在寻找的方法是,只要2ndtable中有新行,它就会自动在另一个表上创建新行。我不知道如何更清楚(英语不是我的母语)。

你给我的解决方案似乎很清楚这个问题,但问题有点大:两个表提供了不同类型的变量,应该是它们是mySQL中的一个,带有用户数据(drupal默认值)对于用户),然后我在postgresql中有2个,都有相同的主键(id_user):

  • 第一列有118列,其中大多数是实数整数;
  • 第二列有50列,混合类型。

我正在使用的Web应用程序需要此列以及所有值NOT EMPTY(否则我得到NullPointerException)才能工作,所以我正在搜索的是(我认为):

当用户在drupal中注册他的电子邮件时,会自动创建两个已完成的列,以便在电子邮件存储在mysql中后立即自动运行。可能吗?它解释得很好吗?

我的环境是:

  • Windows Server 2008企业版
  • glassfish 2.1
  • netbeans 6.7.1
  • drupal 6.17
  • postgresql 8.4
  • mysql 5.1.48

2 个答案:

答案 0 :(得分:1)

pgAdmin只是GUI。您的意思是PostgreSQLRDBMS

foreign key constraint,就像您只强制不能使用任何值一样,在引用列中不存在。您可以使用ON UPDATE CASCADEON DELETE CASCADE来传播引用列中的更改,但不能像您描述的那样使用它创建新行。你得到了错误的工具。

您所描述的内容可以通过trigger来实现。另一种更复杂的方式是RULE。在这里使用触发器。

在PostgreSQL中,您需要一个trigger function,主要使用plpgsql,并在表格上使用trigger

类似的东西:

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 INSERT上的触发tbl1

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

答案 1 :(得分:0)

您可能希望了解如何使用Drupal hooks添加要在用户注册时运行的额外代码。一旦知道如何使用钩子,就可以编写代码(在模块中)以在第二个表中插入相应的记录。这里使用的一个好的候选钩子是hook_user for Drupal 6hook_user_insert for Drupal 7

您阅读的参考资料是SQL命令的一部分,用于从第二个表到第一个表定义foreign key constraint。这不是解决您的问题所必需的,但它可以帮助您保持数据库的一致性。如果您想了解有关此主题的更多信息,我建议您阅读有关数据库结构和约束的内容。