我有有一个名为列两个表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日
pgAdmin的仅仅是GUI。 你的意思是PostgreSQL的 ,在RDBMS 。
一个外键约束 ,就像你只有强制,没有值可以使用,即不存在被引用的列。 您可以使用ON UPDATE CASCADE
或ON 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 INSERT
的tbl1
:
CREATE TRIGGER insaft
AFTER INSERT ON tbl1
FOR EACH ROW EXECUTE PROCEDURE trg_insert_row_in_tbl2();
你可能想了解使用Drupal的钩子添加额外的代码,当用户登录时运行。 一旦你知道如何使用钩子,你可以编写代码(模块)在第二个表中插入相应的记录。 一个好的候选人钩用在这里是为Drupal 6 hook_user或hook_user_insert为Drupal 7 。
你读了参考有关是一个SQL命令定义的一部分外键约束从第二表到第一。 这不是解决你的问题绝对必要的,但它可以让你的数据库保持一致的帮助。 我建议你对数据库结构和约束,如果您想了解更多关于这个话题读了。