删除带外键约束的数据

今天突然发现客户表里面姓名为空的记录竟然有13万之多,日期几乎都是5月31日进来的,在原始数据文件中又没有这些记录,真不知道怎么产生的,因为这些记录常常导致一个身份证号进来返回的是一条无名的记录,客户举报了N次,都是通过改查询代码来搪塞..看来得把这些垃圾数据彻底删除才能解决问题。
一条delete语句下去,一开始是外间约束错误,然后加上5月31日这个条件就不会了,但是半个小时都能没能删除这些垃圾数据,打开后台的session一看,3条类似select /*all rows*/ count(1) from card...的记录在运行,这个应该是oracle检验有没有发生外键冲突的语句,card,account,score表都和customer表有外键关联,难怪整那么久,account、score表的外键都删除后再次delete,还是慢的无法忍受。最后只好把card表上的外键也删除了,然后瞬间就把13万记录删除了,再在card表上重新建立外键。

这种做法其实有风险,可能导致card表的某些记录关联的customer记录被删除,但是考虑到现在的情况,这个可能性很小。而且让oracle保留外键的前提下去删除,不知道半天能不能做完。

你可能感兴趣的:(DB)