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

标签 mysql sql triggers

我遇到以下问题:

我目前有 3 张 table :

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

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

我尝试通过一次将一行插入到 family 中来实现此目的,在每一行之后,我会将人员数据插入到 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

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

最佳答案

尝试使用这个:

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标签。另请注意,我在 insert 之后附加了此触发器关于Info表,不在Person上因为你说目前所有数据都放在Info上表。

你没有告诉我们是否 sonsdaughter还指另一个person (在这种情况下, sonsdaughtersforeign keys ),并将为此 trigger 产生一组不同的代码。

我希望这会有所帮助。

关于mysql - 使用触发器从另一个表填充两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28686663/

相关文章:

mysql - 从json数据创建mysql数据库

mysql - 在 MySQL 查询中使用 Like 和 Concat

Concat 之前的 MySQL 时间差异(同一行)

sql - 计算 session 中两个 Action 之间的时间

mysql - SQL:交叉表查询以将列名反透视为行

sql - 将 bigint 转换为日期时间

Mysql:使用 SUBSTRING 触发

mysql - 是触发器事务吗?

mysql - 如何插入触发器

php - 将多维数组的值存储到变量中