2

HSQLDB を使用するプロジェクトに 2 つのテーブルがあり、それらは と と呼ばStaffStaff2ます。ここに書かれているように、 ID PRIMARY KEYを
Staff持っています:

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

Staff2ここに書かれているように、 ofをId FOREIGN KEY参照しています:PRIMARY KEYStaff

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 サーバーを閉じて再起動しても、テーブルは閉じられませんでした。
また、最初からやり直す方法に関するアドバイスを使用することもできます。今回は、最初からテーブルを削除する前にキーを削除します。

4

2 に答える 2

2

テーブルを削除できますが、逆の順序で行う必要があります。STAFF2に依存するSTAFFため、最初にドロップすることはできませんSTAFF。制約を個別に削除する必要はありません。次の 2 つのコマンドを実行するだけです。

DROP TABLE STAFF2;
DROP TABLE STAFF;
于 2014-12-28T01:04:11.093 に答える
1

HSQLDB では、PRIMARY KEY または UNIQUE 制約を参照する FOREIGN KEY 制約がある場合でも、任意のテーブルを削除できます。DROP TABLE ステートメントの最後に CASCADE キーワードを使用するだけです。そのような FROEIGN KEY 制約も削除されます。

DROP TABLE STAFF CASCADE

データベースが大きく、テーブルが CACHED である場合、実行にかかる時間が短縮されるため、rtruszk によって提供される解決策は優れたものです。

于 2015-02-15T15:49:37.010 に答える