【发布时间】:2017-07-31 06:45:11
【问题描述】:
我有两个表,一个带有自动生成主键的TaskLists 表和一个Tasks 表。一个TaskList 可以有多个Tasks。
我现在如何插入一个TaskLists 行,同时在引用刚刚插入的对象的Tasks 表中自动插入多行。
【问题讨论】:
-
你可以使用触发器
-
需要用到事务,所以可以随意回滚或提交。
我有两个表,一个带有自动生成主键的TaskLists 表和一个Tasks 表。一个TaskList 可以有多个Tasks。
我现在如何插入一个TaskLists 行,同时在引用刚刚插入的对象的Tasks 表中自动插入多行。
【问题讨论】:
根据广义相对论,这个宇宙中没有任何事情是“同时”发生的,所以你不能。 :)
但是,您可以启动一个事务,将一行插入TaskList,将相应的行插入Task,然后提交该事务。从某种意义上说,这肯定是“原子的”,您不能(永久)在数据库中写入部分数据。
如果TaskList的ID是自动递增的,你可以通过LAST_INSERT_ID得到它,然后将它用于Task的FK。
【讨论】:
利用triggers 发生AFTER INSERT
CREATE TRIGGER trigger_name
AFTER INSERT
ON TaskList FOR EACH ROW
BEGIN
-- Insert the rows to tasks now
INSERT INTO tasks (TaskID) VALUES (NEW.TaskId);
-- You can run several insert statements here
END;
如果您想使用来自TaskList 的值,请使用NEW.columname
https://www.techonthenet.com/mysql/triggers/after_insert.php
【讨论】: