1

我有两个表,它们有一个id_user共同命名的列。这两个表是在某个时候在我的 Drupal 网页中创建的(我不知道,因为我没有创建 Netbeans 项目)。

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

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

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

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

  • 第一个有 118 列,大部分是实整数;
  • 第二个有 50 列,混合类型。

我正在使用的 Web 应用程序需要此列的所有值都不是空的(否则我会得到 NullPointerException)才能工作,所以我正在寻找的是(我认为):

当用户在drupal中注册-插入他的电子邮件时,它会自动创建两个已完成的列,以使网络在电子邮件存储在mysql中后立即自动运行。可能吗?解释清楚了吗?

我的环境是:

  • windows server 2008 企业版
  • 玻璃鱼 2.1
  • 网豆6.7.1
  • 德鲁巴 6.17
  • PostgreSQL 8.4
  • mysql 5.1.48
4

2 回答 2

1

pgAdmin只是 GUI。你的意思是PostgreSQLRDBMS

像您一样的外键约束仅强制不能使用任何值,该值不存在于引用的列中。您可以使用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();
于 2012-05-01T18:21:36.590 回答
0

您可能想阅读有关使用Drupal 钩子添加额外代码以在用户注册时运行的信息。一旦你知道如何使用钩子,你就可以编写代码(在一个模块中)在第二个表中插入相应的记录。在这里使用的一个很好的候选钩子是Drupal 6的 hook_user或Drupal 7 的 hook_user_insert

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

于 2012-04-12T14:51:47.187 回答