我有一个MySQL表,它有一个自动递增的主要调用和一个UUID。两者都用作唯一ID,因为有两个表具有相似的对象,并且需要在两个表中都有唯一的标识符(并且可能还有更多的对象)。
所以表格如下:
table A
_______
ID int pk, ai
UUID varchar, uq
other columns....
应用程序将插入到此表中,但可能不会始终生成UUID。有时应用程序提供UUID,有时我需要MySQL来创建一个。
如何实现? - 我尝试过这个触发器:
CREATE TRIGGER trig_ains_aw_trckid
AFTER INSERT ON table_a
FOR EACH ROW
begin
update table_a set UUID = (SELECT concat('k_', uuid())) where UUID is null;
end
现在我无法插入到表中,因为触发器似乎位于其前面:
无法在存储的函数/触发器中更新表'account_keywords' 因为它已被调用此存储的语句使用 功能/触发。
任何帮助都会得到最多的赞赏,并且对我的错误做出任何解释更是如此。如果没有说明显而易见的话,UUID显然应该保持不变...... 以前不需要使用触发器,我想我对它们知之甚少。在MS SQL中,这实际上非常简单!
谢谢,
克里斯
答案 0 :(得分:0)
针对非空案例扩展this答案:
CREATE TRIGGER trig_ains_aw_trckid
BEFORE INSERT ON table_a
FOR EACH ROW
SET UUID = uuid() where UUID is null;
答案 1 :(得分:0)
怎么样:
CREATE TRIGGER trig_ains_aw_trckid
AFTER INSERT ON table_a
FOR EACH ROW
begin
update table_a set UUID = (SELECT concat('k_', uuid()))
where UUID is null
and ID = NEW.ID
end
否则不是每行更新所有空记录,如果处理的记录超过1,则可能导致系统看到它需要多次锁定单个记录,系统无法确定哪个新记录。 ID的更新应该有效。通过限制特定记录,我相信您可以消除您的错误。