使用触发器从另一个 table 填充两个 table
Populating two tables from another table using a trigger
我遇到以下问题:
我目前有 3 个 table:
Person(personID, firstName, lastName, ...)
Household(householdID, personID, sons, daughters, ...)
Info(infoID, firstName, lastName, sons, daughters, ...)
Info table 是当前所有数据所在的位置,而 Person 和 Household 是空的,我想通过将人员数据放入 Person table 来分发数据,并且他们的家庭数据进入Householdtable。 Household.personID 是 Person.personID 的外键。
我试图通过一次插入一行到 household 来做到这一点,在每一行之后我将把人员数据插入到 Person table(这将为该人分配一个唯一的 personID)和然后返回并将新的 personID 插入家庭 table。
环顾四周后,我发现我应该使用事务或通过创建触发器(或两者兼而有之?)。我对两者都不太了解,但这是我根据阅读的内容创建的:
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
任何关于为什么会发生这种情况的见解将不胜感激。提前致谢。
试试这个:
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;
请注意两个插入语句必须都在 BEGIN
和END
标记之间。还要注意,我在 Info
table 的 insert
之后附加了这个触发器,而不是 Person
,因为你说所有数据目前都放在 Info
table.
你没有告诉我们 sons
和 daughter
是否也指另一个 person
(在那种情况下,sons
和 daughters
是foreign keys
),并将为此 trigger
生成一组不同的代码。
希望对您有所帮助。
我遇到以下问题:
我目前有 3 个 table:
Person(personID, firstName, lastName, ...)
Household(householdID, personID, sons, daughters, ...)
Info(infoID, firstName, lastName, sons, daughters, ...)
Info table 是当前所有数据所在的位置,而 Person 和 Household 是空的,我想通过将人员数据放入 Person table 来分发数据,并且他们的家庭数据进入Householdtable。 Household.personID 是 Person.personID 的外键。
我试图通过一次插入一行到 household 来做到这一点,在每一行之后我将把人员数据插入到 Person table(这将为该人分配一个唯一的 personID)和然后返回并将新的 personID 插入家庭 table。
环顾四周后,我发现我应该使用事务或通过创建触发器(或两者兼而有之?)。我对两者都不太了解,但这是我根据阅读的内容创建的:
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
任何关于为什么会发生这种情况的见解将不胜感激。提前致谢。
试试这个:
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;
请注意两个插入语句必须都在 BEGIN
和END
标记之间。还要注意,我在 Info
table 的 insert
之后附加了这个触发器,而不是 Person
,因为你说所有数据目前都放在 Info
table.
你没有告诉我们 sons
和 daughter
是否也指另一个 person
(在那种情况下,sons
和 daughters
是foreign keys
),并将为此 trigger
生成一组不同的代码。
希望对您有所帮助。