前提
在外实习的打工人,今天要清空一张表A的数据,但是表A的主键URID被很多很多表当作外键引用了,不能直接删除数据,要先把引用他的数据删掉。
并且这个数据库里面的表很多很多,我也不知道A表的关联表有哪些。
那就问问度娘吧
很容易,就得到了两种方案。
1.查出表的关联表,然后逐个删除
SElect * from user_constraints where R_CONSTRAINT_NAME in
(select constraint_name from user_constraints where TABLE_NAME='要查找的表')
2.禁用和启用表的外键(这是生成执行脚本,把select查出来的结果复制上来执行就可以了)
select 'alter table ' || table_name || ' disable constraint ' || constraint_name || ';'from user_constraintswhere constraint_type = 'R';
select 'alter table ' || table_name || ' drop constraint ' || constraint_name || ';'from user_constraintswhere constraint_type = 'R';
事实上,这两种方法都是可以的,没有问题,那么奇怪的BUG在哪呢?
数据库软件
要管理数据库,咱们一般都会用Navicat和PLSQL,然后Navicat界面是这个样子的
PLSQL是长这个样子的
嗯,于是我毫不犹豫的就用了Navicat。
奇怪的BUG出现啦
当我把查找关联表的语句执行的时候,是这样的
Navicat里面
WTF???怎么什么东西都没有查出来?我这关联的那么多表的信息呢?
那我们去PLSQL里面执行一下看看
嗯,全都查出来了,姜还是老的辣
总结
虽然PLSQL简约的线条和简陋的界面仿佛让我回到了10年前,但是在Oracle的查询上面还是有一手的。
但是我还是选择Navicat!