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

在MySQL中使用存储过程创建触发器,mysql,stored-procedures,triggers,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_CO

是否可以构建一个在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 ;
有没有一种方法可以一次性创建它? 我从他那里得到了它,并根据我的需要做了一些调整


仅供参考,每当客户表中发生变化时,此触发器会将旧/新值对插入审核表中。

不,即使使用MySQL准备的语句,也不可能。

也不是在两步或几步之内?MySQL会抛出一个错误—“无法从另一个存储例程中创建触发器”。从应用程序中创建触发器或查看数据库架构,避免动态创建触发器。好的,谢谢。这只是为了在我更改模式之后,我可以运行该过程并更新触发器。但是我想我必须手动完成最后一步。如果你通过一个准备好的语句来尝试,你会得到-ERROR 1295(HY000):这个命令在准备好的语句协议中不受支持,答案中说是的。