MYSQL Trigger()与永久删除

时间:2017-08-21 12:29:37

标签: php mysql database

我有两张表格如下:

  1. 用于存储有关Job的信息的表Job_Announcement,定义如下: +-----------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------------+--------------+------+-----+---------+----------------+ | job_id | int(11) | NO | PRI | NULL | auto_increment | | job_title | varchar(255) | NO | | NULL | | | category | varchar(255) | NO | | NULL | | | term | varchar(255) | NO | | NULL | | | num_experiences | int(11) | NO | | NULL | | | num_hiring | int(11) | NO | | NULL | | | Salary | varchar(255) | NO | | NULL | | | qualification | varchar(255) | NO | | NULL | | | location | varchar(255) | NO | | NULL | | | gender | varchar(255) | NO | | NULL | | | job_content | text | NO | | NULL | | | job_requirement | varchar(255) | NO | | NULL | | | publish_date | date | NO | | NULL | | | close_date | date | NO | | NULL | | | contact_info | varchar(255) | NO | | NULL | | | userid | varchar(255) | NO | | NULL | | | publish | tinyint(1) | NO | | NULL | | +-----------------+--------------+------+-----+---------+----------------+
  2. 和表job_announcement_deleted,用于存储表job_announcement中已删除的记录 +--------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------+--------------+------+-----+---------+----------------+ | job_id | int(11) | NO | PRI | NULL | auto_increment | | job_title | varchar(255) | NO | | NULL | | | category | varchar(255) | NO | | NULL | | | job_content | text | NO | | NULL | | | publish_date | date | NO | | NULL | | | close_date | date | NO | | NULL | | | userid | varchar(255) | NO | | NULL | | | publish | tinyint(1) | NO | | NULL | | +--------------+--------------+------+-----+---------+----------------+
  3. 为了将已删除的记录从job_announcement表移到job_announcement_deleted表,我在trigger中定义了phpmyadmin这样的定义:

    触发器名称: before_delete_job

    表: job_announcement

    时间:之前

    活动:删除

    定义: BEGIN INSERT INTO job_announcement_deleted VALUES(old.job_id,old.job_title,old.category,old.job_content,old.publish_date,old.close_date,old.userid,old.publish); END

    定义者: root @ localhost

    触发事件before_delete_job正常工作,已删除的记录已移至表job_announcement_deleted

    我的问题是如果我想将已删除的记录恢复回表job_announcement,我定义类似的触发器定义事件,如上所述,例如。 job_announcement_restore代码为job_announcement_deleted但是,如果我要从job_announcement_deleted永久删除记录,该怎么办?因为我希望用户可以选择恢复它或永久删除。

    感谢。

1 个答案:

答案 0 :(得分:0)

对于恢复,只需执行您要删除的相反过程(将数据从job_announcement发送到DELETE FROM

对于perma删除,您只需要获取job_id字段,因为它会自动增加,使其对每个作业都是唯一的。

从用户获取job_id后(例如,如果他从此行中单击“删除”,则从该行中提取job_id),只需使用DELETE FROM job_announcement_deleted WHERE job_id = @job_id ,如下所示:

job_announcement_deleted

(其中@job_id将是您在此过程中先前获得的那个)

此外,您不应该将job_id发送到{{1}}表,因为该字段是自动递增的,这意味着它将添加一个新值(默认情况下递增1)字段,因此该字段没有重复项。您只需通过这样做来破坏自动增量的含义,特别是因为主键必须是唯一值。如果您获得该字段的重复值,您可能会在以后使用数据库时出现问题,所以我建议您只留下该字段未填充,因此自动增量可以完成它的工作。