删数据的两个例子
什么?删库跑路的时候,居然发现 delete 脚本执行不了?
别慌!那是因为数据和数据之间是有关联的!
以上是个玩笑;
但是以下脚本,可以很顺利的清理一些垃圾数据。前提是操作人要捋清楚表和表的关联关系,做这件事情的好处,可不仅仅是给系统数据库瘦身,同时还会增强你对整个业务系统数据结构的理解,将同一业务的全部数据库表,用 select 尽量一次性查出来,如果数据太多,可以加个limit分页,但是千万不要写错关联字段,也就是 on 后面的内容,否则后果你比我更清楚。然后将 select 更换成 delete,这样做可以根据需要清理掉不用的业务数据,同时还不会误伤友军。是不是很奈斯?且看:
清理系统多余的流程相关表数据
卧槽!这可是核心数据,删错你就完蛋了!业务流程全部瘫痪!(男人哭吧!不是罪)
SET FOREIGN_KEY_CHECKS = 0;
DELETE
new_is, new_i, tu, nr, ent, acc,
t, i, a, c, r, br, n, d
FROM
/* 工作流定义表 */
wf_def d
/* 工作流节点定义表 */
left JOIN wf_def_node n ON n.wf_def_id = d.id
/* 节点的投票规则定义信息 */
LEFT JOIN wf_def_node_ballot_rules br ON br.node_id = n.id
/* 节点可以扭转的路由路径定义信息 */
LEFT JOIN wf_def_node_route r ON r.node_id = n.id
/* 提前所定义的触发路由时,检查业务的脚本 */
LEFT JOIN wf_def_node_route_checkscript c ON c.rid = r.id
/* 提前所定义的触发路由时,处理业务的脚本 */
LEFT JOIN wf_def_node_route_actionscript a ON a.rid = r.id
/* 流程实例 */
LEFT JOIN wf_ins i ON i.wf_def_id = d.id
/* 流程实例处理任务 */
LEFT JOIN wf_ins_task t ON t.wf_def_id = d.id
/* 任务受理结果 */
LEFT JOIN wf_ins_task_acceptance acc ON acc.task_id = t.id
/* 委托代办信息 */
LEFT JOIN wf_ins_task_entrust ent ON ent.wf_node_id = n.id
/* 可参与该节点的角色 */
LEFT JOIN _node_role nr ON nr.nid = n.id
/* 能处理该任务的用户 */
LEFT JOIN _task_user tu ON tu.tid = t.id
/* 产生子流程实例记录 */
LEFT JOIN wf_def_node_route_new_ins new_i ON new_i.wf_def_id = d.id
LEFT JOIN wf_ins_source new_is ON new_is.source_id = i.id
WHERE d.code = '000000' ; /* 要清理的流程编号 (业务表数据除外)*/
SET FOREIGN_KEY_CHECKS = 1;
COMMIT;
清理系统不必要的系统菜单
这个也不能乱删,弄不好菜单没了。
SET FOREIGN_KEY_CHECKS = 0;
DELETE
m , a, b
FROM
/* 权限分支表 */
branch_auth a
/* 分支数据主表 */
inner JOIN branch b ON b.id = a.id
/* 菜单表 */
LEFT JOIN branch_auth_menu m ON m.id = a.id
/* 角色权限关联表 */
LEFT JOIN _role_auth ra ON ra.aid = a.id
WHERE
a.code LIKE '003007011%' ; /* 要删除的菜单编号 */
SET FOREIGN_KEY_CHECKS = 1;
COMMIT;