【发布时间】:2020-12-12 19:39:21
【问题描述】:
我有表“Item”和“Category”,其中“Item”包含一个引用“Category”的外键约束(即每个项目在其类别列中都有一个类别元素的名称)。此约束称为“CONSTRAINT_74E”。
当用户更改数据时,我需要覆盖整个数据库。为此,我使用 TRUNCATE 命令。我试图禁用约束以截断 CATEGORY:
command = "truncate table ITEM;";
s.execute(command); //throws no exception
command = "alter table ITEM disable constraint CONSTRAINT_74E;\n" +
"truncate table CATEGORY;\n" +
"alter table ITEM enable constraint CONSTRAINT_74E;";
s.execute(command);
这会产生以下异常:
org.h2.jdbc.JdbcSQLSyntaxErrorException: SQL 语句中的语法错误 “更改表项禁用 [*] 约束 CONSTRAINT_74E;截断 表类别;更改表项启用约束 CONSTRAINT_74E;"; 预期 "., ADD, SET, RENAME, DROP, ALTER";
SQL 语句:alter table ITEM 禁用约束 CONSTRAINT_74E; 截断表类别; alter table ITEM 启用约束 约束_74E; [42001-200]
我究竟需要做什么才能完成这项工作?我看不出我需要如何添加 SET/RENAME/etc。禁用后。
【问题讨论】:
-
你为什么不直接使用
delete from item;?或者实际上delete from category; delete from item; -
不会重置 id 列,对吧?这最终会成为大型数据库的问题吗?
-
不,不会。但是我发现如果用户更改某些内容,您总是删除“整个数据库”(为什么不只是有问题的表?),这非常令人困惑。为什么不能简单地更新数据?
-
数据库仅包含 4 个表,并且在数据库成为项目的要求时,仅实现覆盖而不是使用 java 观察更改要简单得多。