禁掉tabAA,tabAB中的外键,tabA中就能删掉
似乎不应该有这样的问题~
Top
4 楼hippie1024(努力必有痕迹)回复于 2004-12-21 16:54:43 得分 0 to daydayupliq(强强)
它消耗的时间是在tabAA,tabAB上寻找 ZtCode='001'的check时间,
即使已经删除了check时间还是存在的(就是确认是否已经删除的过程)
Top
5 楼daydayupliq(敞开胸怀!)回复于 2004-12-21 17:01:46 得分 0 不好意思,我比较糊涂~
Top
6 楼daydayupliq(敞开胸怀!)回复于 2004-12-21 17:06:02 得分 0 建议你建立外键时设参数on delete cascade
这样你删除tabA后会级联删除tabAA,tabAB的数据
这样会更快点么??? 发现一个tabA的主键,然后就删除它?
另外普通外键还有什么建法呢?学习!!
楼主的这个问题会不会是这个错误呢?
ERROR at line 1:
ORA-02266: 表中的唯一/主键被启用的外部关键字引用
Top
7 楼daydayupliq(敞开胸怀!)回复于 2004-12-21 17:20:18 得分 0 楼主不好意思,呵呵,我对外键这个概念的确比较糊涂~
1、如果建立普通外键,那么删除父表,对子表应该没有什么影响;
2、on delete cascade,应该会级联删除子表中的记录;
3、我用on delete cascade时,遇到了可以delte 但不能truncate的错误:
SQL> insert into b select * from dept;
4 rows created.
SQL> insert into a select * from emp;
14 rows created.
SQL> commit;
Commit complete.
SQL> alter table a add constraint pk_a primary key (empno);
Table altered.
SQL> alter table b add constraint pk_b primary key (deptno);
Table altered.
SQL> alter table a add constraint fk_a foreign key (deptno) references dept(d
ptno) (on delete cascade);
Table altered.
SQL> delete from b where deptno=10;
1 row deleted.
SQL> truncat table b;
SP2-0734: unknown command beginning "truncat ta..." - rest of line ignored.
SQL> truncate table b;
truncate table b
*
ERROR at line 1:
ORA-02266: 表中的唯一/主键被启用的外部关键字引用
Top
8 楼commit(滩涂鱼)回复于 2004-12-21 17:31:54 得分 0 谢谢二位参与的讨论,我刚才找到了教我们学习oracle开发的刘老师,教了我一个方法,解决了这个困扰我的问题,就是在两个子表中,建立与外键相应的索引,normal的就行,然后再删除,居然效率提高了n多倍,真是惊诧!!汉!
Top
9 楼hippie1024(努力必有痕迹)回复于 2004-12-21 20:31:08 得分 0 todaydayupliq
普通外键,从表有主表相关记录,主表记录是无法删除的
删除父表,会用主表的主键去查询从表的外键
truncate 对普通外键也是一样的,因为它是ddl不是DML
to commit
ft,你外键上没有建索引?
你建立外键后,删除父表,用主表的主键去查询从表的外键时就是一个索引JOIN索引快多了。
偶觉得,外键者,鸡肋也 :)
Top
10 楼daydayupliq(敞开胸怀!)回复于 2004-12-22 09:17:47 得分 0 外键一般是要建立索引的~
普通外键,从表有主表相关记录,主表记录是无法删除的
普通外键是不是不加(on delte **),这个没有实验出
http://topic.csdn.net/t/20041221/15/3663919.html
|