기존 외래 키를 "on delete restrict"에서 "on delete delete cascade"로 변경해야합니다. Unfortunaltey이 버그는 Q/A를 통해 살금 살금 들어 왔습니다.파이어 버드 : "익명"외래 키 변경
내 데이터베이스에는 자동으로 이름이 지정된 여러 가지 주요 키 관계가 있습니다 (INTEG_1, INTEG_2, ...). 해결해야 할 제약 조건의 이름은 버전 2의 업데이트보다 새로운 설치의 버전이며, 이전 버전 2에서이 버전 2를 업데이트 한 경우도 있습니다.
참조 테이블에는 하나의 외부 내가 시도, 그러나
SELECT RDB$CONSTRAINT_NAME
FROM RDB$RELATION_CONSTRAINTS
where RDB$CONSTRAINT_TYPE = 'FOREIGN KEY'
and RDB$RELATION_NAME = 'MY_TABLE_NAME'
그때 내가 ("진짜"이름이 시간) 드롭 이후 외래 키를 다시 만들 수 있습니다
alter table MY_TABLE_NAME
drop constraint <result from above>;
alter table MY_TABLE_NAME
add constraint fk_my_table_name_purpose foreign key (other_id)
references other_table(id) on delete cascade;
: 키,이 문장은 나에게 제약 조건의 이름을 제공합니다 시스템 테이블로 직접 작업하는 것을 피하기 위해 내 외래 키를 변경하는 더 나은/우아한 방법이 있는지 알고 싶습니다.
"시스템 테이블에서 직접 작업하지 마시기 바랍니다 *"- 이유가 무엇입니까? 그건 파이어 버드가 표준 'INFORMATION_SCHEMA'를 가지고 있지 않기 때문에 공식적인 "API"입니다. –
시스템 테이블을 DB 내부와 상호 작용할 수있는 것으로 보았지만 가능하면 안됩니다. 그러나 내 솔루션이 이미 "공식적인 방법"인 경우 ... 괜찮습니다 .-) – Chris
시스템 테이블을 직접 조작하지 말라는 조언은 ** 시스템 테이블 수정 **에 관한 것입니다. Firebird에서는 기술적으로 시스템 테이블의 항목을 삽입, 업데이트 또는 삭제하여 DDL 형식을 수행 할 수 있습니다. 이것은 일련의 문제를 가지고 있기 때문에, Firebird 3는 이것을 불가능하게 만들 것입니다 (예외는 있습니다). –