我有两个表共有一个名为id_user
的列。这两个表是在我的Drupal网页上创建的(我不知道因为我没有创建Netbeans项目)。
我在互联网上查了一下,发现可能通过将REFERENCES 1sttable (id_user)
添加到第二个表,它应该将1sttable
的值(当新用户到达时始终创建)复制到{ {1}} id_user
的值(我不知道在哪个点创建)。这是对的吗?
如果它不正确我想知道pgAdmin中的一种方法可以让我同步这些表,或者至少在同一时刻创建它们。
我遇到的问题是,新用户在注册后会自动在2ndtable
上有一个新行,而在1sttable
上获得新行则需要某种“激活”状态插入所有数据。我正在寻找的方法是,只要2ndtable
中有新行,它就会自动在另一个表上创建新行。我不知道如何更清楚(英语不是我的母语)。
你给我的解决方案似乎很清楚这个问题,但问题有点大:两个表提供了不同类型的变量,应该是它们是mySQL中的一个,带有用户数据(drupal默认值)对于用户),然后我在postgresql中有2个,都有相同的主键(id_user):
我正在使用的Web应用程序需要此列以及所有值NOT EMPTY(否则我得到NullPointerException)才能工作,所以我正在搜索的是(我认为):
当用户在drupal中注册他的电子邮件时,会自动创建两个已完成的列,以便在电子邮件存储在mysql中后立即自动运行。可能吗?它解释得很好吗?
我的环境是:
答案 0 :(得分:1)
pgAdmin只是GUI。您的意思是PostgreSQL,RDBMS。
foreign key constraint,就像您只强制不能使用任何值一样,在引用列中不存在。您可以使用ON UPDATE CASCADE
或ON 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 6或hook_user_insert for Drupal 7。
您阅读的参考资料是SQL命令的一部分,用于从第二个表到第一个表定义foreign key constraint。这不是解决您的问题所必需的,但它可以帮助您保持数据库的一致性。如果您想了解有关此主题的更多信息,我建议您阅读有关数据库结构和约束的内容。