我在成员表中运行插入,当添加新行时,我想运行触发器来更新成员表的用户名字段,但由于可能出现死锁情况,它不会让我受到限制。 / p>
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
语句?
答案 0 :(得分:1)
您必须使用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 ;