MySQL事件和表之间的连接

时间:2015-04-17 10:23:01

标签: php mysql

我正在创建一个MySQL事件,但它与表记录ID相关, 所以当那个记录被删除时,应该删除这个MySQL事件。

它适用于我的代码但是如果从phpMyAdmin直接删除记录会怎么样?

尝试此方案时,不会删除事件并且记录不存在。所以发生了错误。

$this->db->insert("invoice", $data);
        $last = $this->db->insert_id();
        if ($last)
            $str = $this->db->last_query();
        $this->db->query("SET GLOBAL event_scheduler =  'ON'");

        $this->db->query("CREATE EVENT rec" . $last . " ON SCHEDULE 
EVERY 1 MONTH STARTS DATE_SUB(NOW(),INTERVAL '0:01' HOUR_MINUTE) 
ON COMPLETION PRESERVE ENABLE DO $str");

我该如何克服这个问题?我听说我可以使用触发器,但是如何?

1 个答案:

答案 0 :(得分:1)

像这样触发:

SET @ename:='rec';
SET @sql_text = concat('CREATE TRIGGER delete_invoice_event AFTER DELETE on TABLE FOR EACH ROW BEGIN DROP EVENT IF EXISTS ', @ename ,'old.id END');

PREPARE stmt FROM @sql_text;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

您必须使用PREPARE语句,因为您的事件名称是动态的,基于old.id可以访问的已删除记录ID