表由表SYS_REF_SYS_FK_272_275表中的约束引用:语句中的STAFF2 [drop table STAFF]

时间:2014-12-27 12:41:52

标签: sql constraints primary-key hsqldb drop-table

我在使用HSQLDB的项目中有2个表,它们被称为StaffStaff2
Staff Id PRIMARY KEY,如下所示:

s.execute("CREATE TABLE Staff(Id varchar(10) PRIMARY KEY, FirstName varchar(30), LastName varchar(30), Department varchar(255))");.   

Staff2 Id FOREIGN KEY引用了PRIMARY KEY Staff,如下所示:

s.execute("CREATE TABLE Staff2(Id varchar(10), TeachingCourse varchar(30), UserName varchar(255), FOREIGN KEY(Id) REFERENCES Staff(Id))");.  

现在,似乎因为我没有放下这些键,所以我不能放弃这些表。当我执行程序时,它显示以下错误:

抛出

异常:

java.sql.SQLException: Table is referenced by a constraint in table SYS_REF_SYS_FK_272_275 table: STAFF2 in statement [drop table STAFF] 

当我在放下桌子之前尝试独立掉钥匙时,我会遇到其他错误:
当我在做的时候:

s.execute("ALTER TABLE Staff DROP PRIMARY KEY"); 

结果是:

抛出

异常:

java.sql.SQLException: Attempt to drop a foreign key index: SYS_IDX_46 in statement [ALTER TABLE 

职员DROP PRIMARY KEY]

当我在做的时候:

s.execute("ALTER TABLE Staff2 DROP FOREIGN KEY Id");  

我得到了:
抛出异常:

java.sql.SQLException: Column not found: FOREIGN in statement [ALTER TABLE Staff2 DROP FOREIGN]

我有可能在途中某处使用Add CONSTRAINT并且没有关闭它,但DROP CONSTRAINT也不能正常工作(产生异常抛出:

java.sql.SQLException: Constraint not found ID in table: STAFF in statement [ALTER TABLE Staff DROP CONSTRAINT Id]), 

我无法理解如何找到约束,以及这些约束的确切含义以及我是否应该找到它们。

现在我卡住了,无法继续,因为在键被丢弃之前不能删除表格 关闭HSQLDB服务器并重新启动它并没有关闭表 我还可以使用关于如何重新启动它的建议,这次是在第一次丢弃表之前删除密钥。

2 个答案:

答案 0 :(得分:2)

您可以删除表格,但必须按相反的顺序执行。 STAFF2取决于STAFF,因此您无法先删除STAFF。您不必单独删除约束。只需执行以下两个命令:

DROP TABLE STAFF2;
DROP TABLE STAFF;

答案 1 :(得分:1)

在HSQLDB中,即使存在引用其PRIMARY KEY或UNIQUE约束的FOREIGN KEY约束,也可以删除任何表。只需在DROP TABLE语句末尾使用CASCADE关键字即可。任何此类FROEIGN KEY约束也将被删除。

DROP TABLE STAFF CASCADE

rtruszk给出的解决方案是一个很好的解决方案,因为当数据库很大并且表是CACHED时,它将花费更少的时间来执行。