任务是在所有表上创建删除日志记录,但不会为将来创建的现有表或表添加任何开销。也就是说,在DB升级时: 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 ;
首先,包含预处理语句的存储过程看起来像a no go,这似乎是一个显示停止。在理想的世界中,我的游标块将执行一个准备好的语句来执行此操作。
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中没有引起我注意的任何奇特的事情。另一方面,很高兴知道它无法完成,我会接受我必须在开发团队中引入开销。