【发布时间】:2014-08-08 03:26:12
【问题描述】:
我正在尝试在选择中执行插入操作。这是为了将多个相互依赖的插入链接在一起。因此,它看起来像这样。
INSERT (Parent)
--SELECT (Return the Child's uuid created and assigned by TRIGGER)
---INSERT (Child)
数据库中的每条记录都有一个通过触发器插入时分配的 uuid。我为要捕获的每种类型的实体(例如人员、地址、电话、电子邮件)都有一个表格。
解决方案 1:我可以先插入一个依赖实体,例如电话,选择它的 uuid,然后将其包含在父实体中。在这种情况下是“人”。
解决方案2:我可以创建父实体,然后是依赖,然后在获取依赖uuid后更新父实体。
解决方案 3:我要做的是在创建父项的同时创建依赖项,并将其 uuid 返回给父项以插入父记录。这依赖于操作顺序来确保一切都以适当的顺序发生。
由于 mysql 数组支持的问题,我正在伪造一个父/子 uuid_array 表。因此涉及到额外的操作,但给定的示例要简单得多。
知道如何解决这个问题吗?有没有更好的方法来返回 uuid?
INSERT INTO person (Name_First,Name_Middle,Name_Last,Phone_UUID_Array)
VALUES (
'John',
'Diddly',
'Doe',
SELECT @last_uuid
INSERT INTO phone (Phone_Number,Phone_Type)
VALUES (
'1-555-555-5555',
(SELECT UUID FROM VIEW_TYPE_CATEGORY WHERE Reference_Type='Personal cell' AND Category='phone')
)
);
我为每个表创建的触发器示例
CREATE TRIGGER uuid_person BEFORE INSERT ON person FOR EACH ROW SET NEW.UUID = UUID();
CREATE TRIGGER last_uuid_person AFTER INSERT ON person FOR EACH ROW SET @last_uuid = NEW.UUID;
CREATE TRIGGER uuid_phone BEFORE INSERT ON phone FOR EACH ROW SET NEW.UUID = UUID();
CREATE TRIGGER last_uuid_phone AFTER INSERT ON phone FOR EACH ROW SET @last_uuid = NEW.UUID;
【问题讨论】:
-
我已经看过那个了。似乎取决于设置的自动增量,我没有使用。
-
我通常发现使用编程语言编写所有插入和选择脚本并跟踪所有内容是最简单的。说 perl 什么的。
-
这就是我认为我要解决的问题。因为我可能无法控制界面,所以我更喜欢在数据库中做尽可能多的事情,并提供简单的视图来使用。我还想使用该功能建立系统中所有记录更改的自动日志记录。