zoukankan      html  css  js  c++  java
  • 当有外键时的表删除数据,truncate与delete

    当我们删除表里数据时,当此表主键作为外键时可能比较麻烦。特别是自关联的场合将非常麻烦(本表其他字段外键引用本表id)。
    此时我们考虑到两个命令:truncate与delete。
    truncate:是一个DDL语句,优点是效率高,在删除大表数据时很快。但一个很大的问题也是因为他是ddl语句,将会被自动提交事物,不可undo或者rollback。
    delete:与truncate相反,delete命令可以回滚,但在删除数据的过程中将产生大量恢复信息以备rollback,所以将会很慢。

    OK,回到我们的问题上来,现在我们如果想删除一个自表外键关联的所有数据,若直接truncate将会报:

    ORA-02266: unique/primary keys in table referenced by enabled foreign keys

    直接delete会报:

    ORA-02292: integrity constraint (XXXUSER.FKNAME) violated - child record found

    解决方法:
    1、先暂时禁掉主键

    SQL> ALTER TABLE T_XXXX DISABLE PRIMARY KEY CASCADE;
    TABLE ALTERED.

    2、删除数据,commit

    SQL> DELETE FROM T_XXXXX;
    
    3507 ROWS DELETED.
    
    SQL> commit;
    
    Commit complete.

    3、重新启用主键

    SQL> ALTER TABLE T_XXXXX ENABLE PRIMARY KEY;
    
    TABLE ALTERED.

    OK,数据被成功删除了。

  • 相关阅读:
    objective-C nil,Nil,NULL 和NSNull的小结
    Calendar控件点击下个月按钮后,本月标记的各个具体天的样式都取消
    如何让Button的Text垂直居中显示
    html基础总结2
    html基础总结1
    html基础总结
    微信空白页获取用户openid
    网址
    网站式更新后台代码
    JavaScriptSerializer引用
  • 原文地址:https://www.cnblogs.com/radio/p/3085730.html
Copyright © 2011-2022 走看看