2
我使用H2进行集成测试,我有这种奇怪的行为,我无法解释。下面是步骤重新创建:H2更新时引用完整性约束违规
DROP TABLE IF EXISTS A;
DROP TABLE IF EXISTS B;
CREATE TABLE A(ID INT PRIMARY KEY, COLUMN1 VARCHAR(255));
CREATE TABLE B(ID INT PRIMARY KEY, A_ID INT, COLUMN1 VARCHAR(255));
ALTER TABLE B ADD FOREIGN KEY (A_ID) REFERENCES A(ID);
INSERT INTO A VALUES(1,'foo');
INSERT INTO B VALUES(1,1,'foo');
CREATE INDEX IDX1 ON A(ID,COLUMN1);
ALTER TABLE A ADD COLUMN COLUMN2 VARCHAR(255);
UPDATE A SET COLUMN1='bar';
这最后更新生成以下错误: 参照完整性约束违规: “CONSTRAINT_42_1:PUBLIC.B外键(A_ID)参考文献PUBLIC.A(ID)(1)”; 我试过与HSQLDB相同的步骤成功(没有参照完整性约束违规)。 我发现使它与H2一起工作的唯一解决方法是在添加列之前删除索引并再次重新创建相同的索引。
有没有什么理由为什么H2会抱怨违规,我没有看到,因为我没有更新ID列?