Php MYSQL触发器()与永久删除

Php MYSQL触发器()与永久删除,php,mysql,database,Php,Mysql,Database,我有两个表格如下: 表Job\u Announcement用于存储有关Job的信息,定义如下: +-----------------+--------------+------+-----+---------+----------------+ |字段|类型|空|键|默认|额外| +-----------------+--------------+------+-----+---------+----------------+ |作业id | int(11)| NO | PRI | NULL

我有两个表格如下:

  • Job\u Announcement
    用于存储有关Job的信息,定义如下:
    
    +-----------------+--------------+------+-----+---------+----------------+
    |字段|类型|空|键|默认|额外|
    +-----------------+--------------+------+-----+---------+----------------+
    |作业id | int(11)| NO | PRI | NULL |自动增量|
    |职位名称| varchar(255)|否|空||
    |类别| varchar(255)| NO | | NULL ||
    |术语| varchar(255)| NO | | NULL ||
    |num|u经验| int(11)| NO | | NULL ||
    |雇用人数|整数(11)|否|空||
    |薪水| varchar(255)|否| |空||
    |限定| varchar(255)|否| |空||
    |位置| varchar(255)| NO | | NULL ||
    |性别| varchar(255)|否| |空||
    |作业|内容|文本|否|空||
    |工作要求| varchar(255)|否|空||
    |发布日期|日期|否| |空||
    |结束日期日期否无效|
    |联系方式| varchar(255)|否| |空||
    |userid | varchar(255)| NO | | NULL ||
    |发布| tinyint(1)|否| |空||
    +-----------------+--------------+------+-----+---------+----------------+
    
  • 和表
    job\u announcement\u deleted
    ,用于存储表
    job\u announcement
    
    +--------------+--------------+------+-----+---------+----------------+
    |字段|类型|空|键|默认|额外|
    +--------------+--------------+------+-----+---------+----------------+
    |作业id | int(11)| NO | PRI | NULL |自动增量|
    |职位名称| varchar(255)|否|空||
    |类别| varchar(255)| NO | | NULL ||
    |作业|内容|文本|否|空||
    |发布日期|日期|否| |空||
    |结束日期日期否无效|
    |userid | varchar(255)| NO | | NULL ||
    |发布| tinyint(1)|否| |空||
    +--------------+--------------+------+-----+---------+----------------+
    
  • 为了将删除的记录从
    job\u announcement
    表移动到
    job\u announcement\u deleted
    表,我在
    phpmyadmin
    中定义了
    trigger
    定义,如下所示:

    触发器名称:删除作业之前

    表格:工作公告

    时间:之前

    事件:删除

    定义:
    
    开始
    将删除的值(old.job\u id、old.job\u title、old.category、old.job\u content、old.publish\u date、old.close\u date、old.userid、old.publish)插入到job\u公告中;
    结束
    

    定义者:root@localhost

    删除作业之前的触发事件
    工作正常,删除的记录移动到表
    作业公告\u deleted

    我的问题是,如果我想将删除的记录还原回表
    job\u announcement
    ,我会像上面一样定义类似的触发定义事件,例如
    job\u announcement\u restore
    为table
    job\u announcement\u deleted
    定义记录。但是,如果我想从
    job\u announcement\u deleted
    永久删除记录,我该怎么办?因为我希望用户可以选择恢复它或永久删除它


    谢谢。

    对于恢复,只需执行与删除相反的过程(将数据从
    作业公告
    发送到
    作业公告

    对于perma delete,您只需要获得job_id字段,因为它是自动递增的,使它对于每个作业都是唯一的

    从用户处获取作业id后(例如,如果他单击此行中的“删除”,您将从该行中提取作业id),只需像这样使用
    delete from

    DELETE FROM job_announcement_deleted WHERE job_id = @job_id 
    
    (其中@job_id将是您在流程早期获得的)


    此外,您不应该将作业id发送到
    job\u announcement\u deleted
    表,因为该字段是自动递增的,这意味着它将为该字段添加一个新值(默认递增1),因此该字段没有重复项。这样做只会破坏自动递增的含义,特别是因为主键必须是唯一的值。如果该字段的值重复,您可能会在以后的数据库中遇到问题,因此我建议您将该字段保留为未填充状态,以便自动增量可以完成其工作。

    对于恢复,只需执行与删除相反的过程(将数据从
    作业公告\u删除
    发送到
    作业公告

    对于perma delete,您只需要获得job_id字段,因为它是自动递增的,使它对于每个作业都是唯一的

    从用户处获取作业id后(例如,如果他单击此行中的“删除”,您将从该行中提取作业id),只需像这样使用
    delete from

    DELETE FROM job_announcement_deleted WHERE job_id = @job_id 
    
    (其中@job_id将是您在流程早期获得的)

    此外,您不应该将作业id发送到
    job\u announcement\u deleted
    表,因为该字段是自动递增的,这意味着它将为该字段添加一个新值(默认递增1),因此该字段没有重复项。这样做只会破坏自动递增的含义,特别是因为主键必须是唯一的值。你可以吃鳟鱼