插入时MySQL触发问题

时间:2014-05-30 19:20:52

标签: mysql triggers insert

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

1 个答案:

答案 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 ;