使用触发器从另一个表填充两个表

时间:2015-02-24 01:15:06

标签: mysql sql triggers

我遇到以下问题:

我目前有3张桌子:

Person(personID, firstName, lastName, ...)
Household(householdID, personID, sons, daughters, ...)
Info(infoID, firstName, lastName, sons, daughters, ...)

Info表是当前所有数据的位置,而Person和Household是空的,我想通过将人员数据放入Person表并将他们的家庭数据放入Household表来分发数据。 Household.personID是Person.personID的外键。

我试图通过一次一行插入一行来实现这一点,并且在每一行之后我将人员数据插入到Person表中(这将为该人分配一个唯一的personID),然后返回并插入新的personID进入家庭表。

环顾四周之后,我发现我应该使用交易或创建触发器(或两者兼而有之?)。我也不太了解,但这是我从我所读到的内容中创造的:

CREATE TRIGGER PersonTrigger AFTER INSERT ON Person
FOR EACH ROW BEGIN
    INSERT INTO Household
    (personID, sons, daughters, ...")
    VALUES (LAST_UPDATE_ID(), (SELECT sons, daughters, ...
    FROM Info)
    END;

INSERT INTO Person (firstName, lastName, ...)"
    SELECT firstName, lastName, ... 
    FROM Info

但是在尝试运行时,我收到了SQLException错误

SQLException: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'EACH ROW BEGIN INSERT INTO TestHousehold(personID, givenName, lastName' at line 1

任何关于为什么会发生这种情况的见解将不胜感激。提前谢谢。

1 个答案:

答案 0 :(得分:0)

尝试使用:

CREATE TRIGGER distributing_info_details AFTER INSERT ON Info FOR EACH ROW
BEGIN
  INSERT INTO Household (personID, sons, daughters, ...)
    VALUES (new.PersonID, new.sons, new.daughters, ...)
    # use    ^ this key word to access the newly inserted ID.
  INSERT INTO Person (firstName, lastName, ...)
    VALUES (new.firstName, new.lastName,...)
END;

请注意,两个插入语句必须位于 BEGINEND标记之间。另请注意,我在insert表后Info附加了此触发器,而不是Person,因为您说所有数据当前都放在Info表上。

您没有告诉我们sonsdaughter是否也引用了另一个person(在这种情况下,sonsdaughtersforeign keys trigger),并将为此{{1}}提供一组不同的代码。

我希望这会有所帮助。