[英]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.