在MySQL中使用存储过程创建触发器

时间:2011-09-20 12:53:15

标签: mysql stored-procedures triggers

是否可以构建一个在MySQL中创建触发器的存储过程? 我有下面的存储过程,它工作正常,但它只输出代码来创建触发器,但实际上并没有创建它。

DELIMITER $
CREATE PROCEDURE addCustomerLogTrigger()
BEGIN
    SELECT CONCAT(
        'CREATE TRIGGER customer_audit AFTER UPDATE ON customer FOR EACH ROW BEGIN ',
        GROUP_CONCAT(
            CONCAT(
                'IF OLD.', column_name, ' != NEW.', column_name, ' THEN INSERT INTO st_person_audit_log (',
                    'id, ',
                    'fieldName, ',
                    'old_value, ',
                    'new_value, ',
                    'time_stamp, ',
                    'person_id'
                    ') VALUES (
                    NEW.id,
                    ''', column_name, ''', 
                    OLD.', column_name, ',
                    NEW.', column_name, ',
                    NOW(),
                    NEW.last_updated_by
                ); END IF;'
            )
            SEPARATOR ' '
            ), ' END;$'
        )
        FROM
            information_schema.columns
        WHERE
            table_schema = database()
            AND table_name = 'customer';

END$
DELIMITER ;

有没有办法一次创建它? 我从http://thenoyes.com/littlenoise/?p=43得到了它并根据我的需要调整了一点。

仅供参考,只要客户表中的内容发生变化,此触发器就会将旧/新值对插入到审计表中。

2 个答案:

答案 0 :(得分:2)

不,即使使用MySQL编写的语句,也是不可能的。

答案 1 :(得分:0)

我也面临使用存储过程创建触发器的相同问题。那么,还有其他方法可以动态创建触发器吗?

我正在使用存储过程(即,准备好的语句)创建表,但是准备好的语句不支持这种(触发)类型的协议。

即使我尝试将表从一个数据库复制到另一个数据库,它也已成功复制,但是没有创建触发器和索引。

谢谢。