2015-02-24 90 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