sql - 在 Oracle SQL 中删除表

标签 sql oracle foreign-keys

每当我尝试删除表或创建表时,它都会显示以下错误:

DROP TABLE SUBURB;
DROP TABLE STOCKITEM;
DROP TABLE MANUFACTURER;
DROP TABLE WAREHOUSE;
DROP TABLE CITY;
DROP TABLE STATE;

Error at line 1: ORA-02449: unique/primary keys in table referenced by foreign keys


 CREATE TABLE STATE (
 statecode varchar(3)
 ,statename varchar(30)
 ,population number(8)
 ,primary key(statecode)
  );

Error at line 1: ORA-00955: name is already used by an existing object



任何人都可以解释为什么会发生这种情况?

最佳答案

如果您真的确定要删除表,即使它在外键中被引用,您可以像这样强制它:

drop table state cascade constraints;

此语法在 the Oracle SQL Reference 中定义.

请注意,这会删除任何外键关系。因此,您需要在重建表(及其主键)后重新创建它们。通常这是可以的,因为最常见的用例是在开发或 CI 环境中删除和重新创建模式。

我们可以使用 cascade constraints使我们的构建脚本更易于维护。有两种选择:
  • 在删除之前显式删除外键约束
    表,使用脚本或动态 SQL。
  • 订购 DROP
    TABLE 语句,以便首先删除从属表,然后
    用他们讨厌的外键。足够简单的几张 table ,
    大架构更痛苦。
  • 关于sql - 在 Oracle SQL 中删除表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32292561/

    相关文章:

    mysql - SQL 检查一个表中的行是否也存在于另一个表中的最有效方法

    javascript - 三分之一的下拉列表使用 mysql 创建冲突

    sql - MySQL:如何以编程方式确定外键关系?

    MySQL 查询 phpmyadmin

    mysql - 将 "ifs"嵌套在 select-where 中以进行条件动态过滤

    SQL检查取消分组列值是否匹配

    c# - excel表格中的SQL查询语句

    python - 有时无法使用 Django 删除 Oracle 数据库行

    oracle - 我怎么知道使用sql查询打开事务?

    python - Django 模型将外键设置为另一个模型的字段