我有两个表,它们都有一个名为 id_user
的列。这两个表是在某个时候在我的 Drupal 网页中创建的(我不知道,因为我没有创建 Netbeans 项目)。
我在网上查了下,发现可能是把REFERENCES 1sttable (id_user)
加到第二张表,应该复制1sttable
的值(就是总是当新用户到达时创建)到 2ndtable
的 id_user
值(我不知道是在哪个点创建的)。是否正确?
如果不正确,我想知道 pgAdmin 中的一种方法可以让我同步这些表,或者至少同时创建它们。
我遇到的问题是,新用户一注册就自动在 1sttable
上有一个新行,而要在 2ndtable
上获得一个新行,它需要一些有点像插入所有数据的“激活”。我正在寻找一种方法,只要 1sttable
中有新行,它就会自动在另一个表上创建新行。我不知道如何说得更清楚(英语不是我的母语)。
你给我的解决方案看起来问题很清楚,但问题有点大:两个表呈现不同种类的变量,应该是它们是,一个在mySQL中,带有用户数据(drupal default对于用户),然后我在 postgresql 中有 2 个,它们都具有相同的主键(id_user):
- 第一个有118列,大部分是实整数;
- 第二个有 50 列,混合类型。
我正在使用的 Web 应用程序需要此列的所有值都不是空的(否则我得到 NullPointerException)才能工作,所以我正在搜索的是(我认为):
当用户在 drupal 中注册 - 插入他的电子邮件 - 时,它会自动创建两个已完成的列,以便在电子邮件存储在 mysql 中后立即自动运行网络。是否可以?解释清楚了吗?
我的环境是:
- windows server 2008 企业版
- 玻璃鱼 2.1
- netbeans 6.7.1
- drupal 6.17
- postgresql 8.4
- mysql 5.1.48
最佳答案
pgAdmin只是图形用户界面。你是说 PostgreSQL , RDBMS .
A foreign key constraint ,就像您只强制不能使用任何值一样,引用的列中不存在该值。您可以使用 ON UPDATE CASCADE
或 ON DELETE CASCADE
从引用的列传播更改,但您不能像您描述的那样用它创建新行 .你用错了工具。
您所描述的可以通过 trigger 实现.另一种更复杂的方法是 RULE
.在这里使用触发器。
在 PostgreSQL 中你需要一个 trigger function , 主要使用 plpgsql , 和一个 trigger在使用它的 table 上。
类似于:
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;
tbl1
上的触发器AFTER INSERT
:
CREATE TRIGGER insaft
AFTER INSERT ON tbl1
FOR EACH ROW EXECUTE PROCEDURE trg_insert_row_in_tbl2();
关于postgresql - 在 INSERT 到表中 INSERT data in connected tables,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10119005/