需求场景是:用户在软件中注册之后,过段时间可以进行注销用户操作,注销用户之后需要清除该用户在该软件中的所有无用数据,需要考虑的有:数据表之间的关联关系、以及关联字段,根据userid进行清,但是不一定都是userid还有可能是user_id等等,部分很多细节问题。

需要帮助,提供各种觉得还不错的脚本思路,大家一起讨论,感谢!

1 2 收藏


直接登录
最新评论
  • sunshine engineer 04/08

    暖贴。
    拙见。
    大多数APP一般不为用户提供注销功能或者提供伪注销功能(像我这种轻微强迫症患者强烈希望能够抹除一些无意义的行为痕迹),避免用户一时的误操作和数据的流失,同时为大数据分析做准备。
    1.物理删除用户数据前建议做好数据备份,为意外情况的必要数据恢复做准备。
    2.大数据量(TB)的情况下删除用户数据暂不考虑,可能数据的存储方式和存储结构都不同于常规情况,需DBA的协同和帮助。
    3.常规数据量的情况下,
    a)有foreign key,并且在update和delete是cascade的情况下,应该无需其他考虑,相应的update和delete语句可以直接级联删除相关表的数据。
    b)无foreign key,一般多表连接进行删除。
    e.g. delete t1,t2,t3 from t1 left join t2 on t1.c1 = t2.c1 left join t3 on t1.c1 = t3.c1 where t1.c1 = ‘1’;
    4.在3.b的情况下,如果有100或者更多张表呢?这里提供一种思路。
    a)筛选出所需要的数据库,表和字段(字段必须是identified field or primary key or unique constranint)。
    e.g. select t.table_schema,c.table_name,column_name from information_schema.columns c
    left join information_schema.tables t on c.table_name = t.table_name
    where t.table_schema in (’83f98246′, ‘articledb’, ‘h5db’) and column_name in (‘id’, ‘username’, ‘groupname’);
    b)根据这些字段的固定值去拼接sql语句删除指定的数据。
    e.g. delete from user where username = ‘sunshine’;

    • 西瓜妹子 PHPer 04/10

      谢暖贴,我会认真看你的建议,等我看透一遍之后,再认真回复以上建议,先表示感谢。

    • 西瓜妹子 PHPer 04/10

      我目前的思路是定义数组,前提单表删除或者关联表删除,目前限制关联表最多两个表进行关联,我觉得这个基本可以满足我们目前的数据表了。

      定义配置数组之后进行遍历,拼凑delete语句进行删除【须知:是否需要备份数据,这个先备注,再做考虑是否需要如何备份,如何恢复,如何使用】,突然一下,感觉我说得好简单,基本例子我写了一份,我们讨论之后再做最后确定,感谢帮助~

      [可爱脸][卖萌脸]

      • sunshine engineer 04/10

        一般都是先实现功能,然后根据使用情况进行优化。思想+行动,你都有了, cheers~

  • 0-1   04/08

    现实场景中,很少真正的清楚数据

    • 西瓜妹子 PHPer 04/10

      因为我们是属于第三方软件,用户订购之后使用,但是用户不使用或者是过期以后,我们不清数据的话,数据库会越来越大全是一些过期用户的数据,分析没有意义,留着没有意义,于是乎想要删除,清空一下过期用户的无用数据