繁体   English   中英

MySQL触发器插入问题

[英]MySQL trigger issue on insert

我在成员表中运行插入操作,当添加新行时,我想运行触发器以更新成员表的用户名字段,但由于可能的死锁情况而受到限制,它不会让我使用。

DELIMITER //
CREATE TRIGGER tr_add_member
AFTER INSERT ON td_members
FOR EACH ROW BEGIN
    IF mem_username = '' THEN
         SET mem_username = CONCAT('user' , mem_id);
    END IF;
END//
DELIMITER ;

我尝试使用OLD和NEW关键字,但是它们不起作用,我删除了上面的NEW和OLD关键字,但是此触发器导致了以下错误。

ERROR 1193 (HY000): Unknown system variable 'mem_username'

我应该从触发器中调用一个过程来执行我想要的事情,而只是从该过程中运行一个简单的UPDATE语句吗?

您必须使用BEFORE INSERT触发器,而不要使用AFTER INSERT触发器。

如果mem_id是自动递增的主键字段,则找到它
并使用information_schema.tables下一个自动增量值。

更改触发代码,如下所示

DELIMITER //

DROP TRIGGER IF EXISTS tr_add_member //

CREATE TRIGGER tr_add_member
       BEFORE INSERT ON td_members
       FOR EACH ROW 
BEGIN
    DECLARE _mem_id INT DEFAULT 0;

    IF length( trim( NEW.mem_username ) ) = 0 THEN
         SELECT AUTO_INCREMENT INTO _mem_id
           FROM INFORMATION_SCHEMA.TABLES
          WHERE TABLE_NAME = 'td_members'
            AND TABLE_SCHEMA = DATABASE();

         SET NEW.mem_username = CONCAT( 'user', _mem_id );
    END IF;
END;

//

DELIMITER ;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM