首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当字段值为null时,逐行更新MySQL表

问当字段值为null时,逐行更新MySQL表
EN

Stack Overflow用户
提问于 2014-12-15 18:18:51
回答 2查看 388关注 0票数 0

我有一个MySQL表,它具有一个自动递增的主调用和一个UUID。这两个表都是唯一的ID,因为有两个具有相似对象的表,并且两个表都需要一个唯一标识符(可能还有更多的对象)。

所以桌子看起来:

代码语言:javascript
复制
table A
_______
ID int pk, ai
UUID varchar, uq
other columns....

应用程序将插入到这个表中,但很可能它并不总是生成一个UUID。有时应用程序提供UUID,有时我需要MySQL来创建UUID。

怎么做到的?-我试过用这个扳机:

代码语言:javascript
复制
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中,这实际上是相当容易的!

谢谢,

克里斯

EN

回答 2

Stack Overflow用户

发布于 2014-12-15 18:31:05

对于非空情况扩展this答案:

代码语言:javascript
复制
CREATE TRIGGER trig_ains_aw_trckid
  BEFORE INSERT ON table_a 
  FOR EACH ROW
  SET UUID = uuid() where UUID is null;
票数 0
EN

Stack Overflow用户

发布于 2014-12-15 18:35:14

那麽:

代码语言:javascript
复制
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的更新应该工作。通过限制特定的记录,我相信您可以消除您的错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27490479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档