У меня есть 2 таблицы в проекте, который использует HSQLDB, они называются Staff
и Staff2
.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 и его перезапуск не привели к закрытию таблиц.
Я также мог бы воспользоваться советом относительно того, как начать все заново и на этот раз сбросить ключи перед сбрасыванием столов с первого раза.