2015-02-24 57 views
0

我有以下问题填充另一个表中的两个表:使用触发器

我现在有3个表:

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

的信息表,其中所有的数据,目前,虽然人和家庭是空的,我想通过将个人数据放入个人表中,并将他们的家庭数据放入家庭表中来分发数据。 Household.personID是Person.personID的外键。

我试图通过在家庭中每次插入一行来做到这一点,并且在每行之后,我会将人员数据插入到人员表格中(这将为该人员分配一个唯一的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 

任何有识之士来为什么这可能会发生,将不胜感激。提前致谢。

+0

你能发布整个触发代码吗? – 2015-02-24 01:29:56

+0

'我试图通过每次插入一行来做到这一点'你将数据插入到houhold表中......所以,在触发前使用并且触发它,否则家庭将数据插入到人表中get * * maxid **然后将其插入家用餐桌。 – 2015-02-24 02:28:42

+0

@MatteoRubini在阅读之前和之后,我从来没有使用触发器,我发现我需要在触发器代码后面设置一个'DELIMITER'并且有一个'END'。这是你发布我的整个触发器代码的意思,还是有更多我失踪? – mkk 2015-02-24 07:32:39

回答

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; 

请注意,两个INSERT语句必须BEGINEND标签都之间。另外请注意,我在Info表上的insert后面附加了这个触发器,而不是Person,因为您表示所有数据当前都放在Info表中。

你没有告诉我们sonsdaughter是否也涉及到其他person(在这种情况下,sonsdaughtersforeign keys),并且将产生为这个trigger一组不同的代码。

我希望这会有所帮助。

+0

谢谢你的回复!问题在于我在更新家庭时创建了一个触发器,以便插入到家庭中,因此创建了一个无限循环。 – mkk 2015-02-25 22:42:23