我有一个MySQL表,它具有一个自动递增的主调用和一个UUID。这两个表都是唯一的ID,因为有两个具有相似对象的表,并且两个表都需要一个唯一标识符(可能还有更多的对象)。
所以桌子看起来:
table A
_______
ID int pk, ai
UUID varchar, uq
other columns....应用程序将插入到这个表中,但很可能它并不总是生成一个UUID。有时应用程序提供UUID,有时我需要MySQL来创建UUID。
怎么做到的?-我试过用这个扳机:
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中,这实际上是相当容易的!
谢谢,
克里斯
发布于 2014-12-15 18:31:05
对于非空情况扩展this答案:
CREATE TRIGGER trig_ains_aw_trckid
BEFORE INSERT ON table_a
FOR EACH ROW
SET UUID = uuid() where UUID is null;发布于 2014-12-15 18:35:14
那麽:
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否则,不是每一行都更新所有空记录--事实上,如果处理了超过一个空记录,系统可能会看到它需要多次锁定单个记录,并且系统无法确定哪一个new.ID的更新应该工作。通过限制特定的记录,我相信您可以消除您的错误。
https://stackoverflow.com/questions/27490479
复制相似问题