1

任务是在所有表上创建删除日志记录,但不增加现有表或将来创建的表的开销。也就是说,在数据库升级时: 1. 循环数据库中所有表的信息模式 2. 在循环中,删除现有触发器以进行删除(因此我们可以在需要时更新触发器逻辑) 3. 再次在循环中,重新创建删除触发器

调查存储过程的限制,我想我遇到了一些事情。这是我正在寻找的一个循环:

DELIMITER $$

DROP PROCEDURE IF EXISTS create_delete_triggers $$

CREATE PROCEDURE create_delete_triggers()
BEGIN
   DECLARE done int default false;
   DECLARE tblname CHAR(50);

   DECLARE cur1 CURSOR FOR SELECT TABLE_NAME FROM INFORMATION_SCHEMA.tables WHERE TABLE_SCHEMA = 'app_db' AND TABLE_NAME LIKE 'obj%' ;
   DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

   OPEN cur1;

   deleteloop: LOOP
        FETCH cur1 INTO tblname;
        IF done THEN
            LEAVE deleteloop;
        END IF;
        -- ANY SORT of function I can do here to set triggers on these 
        SELECT tblname, DATABASE();
    END LOOP;

    CLOSE cur1;
END $$

DELIMITER ;

首先,其中包含准备好的语句的存储过程看起来像是不行,这似乎是一个阻碍。在理想情况下,我的游标块将执行一个准备好的语句来执行此操作。

DELIMITER $$ 

CREATE TRIGGER del_row_table_name AFTER DELETE ON  tblname 
FOR EACH ROW 
BEGIN 
    -- use old row to marshall a row to store its primary key, time of deletion, and tablename
END $$ 

DELIMITER ;

所以基本上,我正在四处寻找 MySQL 中没有引起我注意来解决这个问题的任何花哨的东西。另一方面,很高兴知道它无法完成,我会接受我必须在开发团队中引入开销。

4

0 回答 0