안녕하세요.
테이블 생성 명령은 동일합니다.
aaa 테이블에 CONSTRAINT 이용해서 DF,PK 설정을 하였습니다.
그리고 백업차원에서 aaa2 로 이름을 EM에서 강제로 변경하였습니다.
그리고 다시 aaa 테이블에 CONSTRAINT 이용해서 DF,PK 설정을 하였습니다.
근데 여기에서
이미 CONSTRAINT 설정되어 있다고 나오더라구요.
혹시나 해서 생성소스자체를 aaa3 이라고 변경후 테이블에 CONSTRAINT 이용해서 DF,PK 설정을 하였습니다.
적용이 되더라구요.
그럼 소스의 문제가 아니라 제가 강제로 이름을 변경하였으나
DF,PK는 기존 aaa 테이블이라는 정보로 인식되어서
새로 aaa 라는 테이블을 생성후 CONSTRAINT 이용해서 DF,PK 설정을 해도 이미 있다고 나오는것 같더라구요.
근데 문제는 이름을 바꾼 aaa2 에도 CONSTRAINT 기능은 그대로 나두어야 되거든요?
원래 잘 되어있는 테이블을 백업할려고 이름변경후
기존 테이블명으로 새로 생성하면 CONSTRAINT 이 부분이 충돌나는것이 맞나요?
그렇다면 충돌 안나게 하는 방법은 어떻게 되나요?
조언 부탁드립니다.
수고하세요.
Comment 5
-
초짜해커
2014.09.24 11:13
-
김영환_281520
2014.09.24 12:05
아 빠른답변 감사드립니다.
대략 그런것 같았는데.. 제가 잘 몰라서요.
그렇다면 이것은 수정할수 있는방법은 없나요?
아예 테이블을 삭제하고 다시 등록해도 계속 있다고 나오더라구요.ㅠㅠ
drop table명 으로 삭제하고
다시 생성해도 마찬가지더라구요.
물론 데이타베이스를 삭제후 재생성하면 되겠지만
소스에서 강제로 변경하는 방법은 없을런지요?
삭제는 안되고요. 어짜피 이름바꾼 테이블이래도 그대로 기능은 사용하는거라서요.
전 이름바꾸면 이름바꾼것으로 유지하고 싶었거든요.
-
초짜해커
2014.09.24 14:11
1. AAA 테이블 만들고 CONSTRAINT 생성
2. AAA를 AAA2로 변경
3. AAA를 다시 만들고 CONSTRAINT 생성, 근데 이미 있다고 나옴
이런건가요?
그럼 CONSTRAINT 이름이 중복됐네요.
CONSTRAINT도 하나의 OBJECT입니다. 테이블 이름을 바꾸면 테이블 이름만 바뀌고 종속된 제약조건들의 이름은 바뀌지 않습니다.
-
김영환_281520
2014.09.25 11:19
예 맞습니다.
그렇다면 아예 한번 제약조건을 준것들의 수정이나 삭제는 할수 없나보네요.ㅠㅠ
답변감사드립니다.
수고하세요.
-
초짜해커
2014.09.25 11:26
음.... 한번 제약조건 준것들은 수정이나 삭제를 할 수 없다기 보다는
제약조건들도 하나의 오브젝트 이기 때문에 다른 이름을 사용하라는 것이죠.
예를 들어서
"A" 테이블에 "PK_A"라는 PRIMARY KEY를 만든 다음 A테이블의 이름을 B로 바꾸었습니다.
근데 그런다고 해서 PK_A가 PK_B로 바뀌진 않아요.
B테이블의 PK가 PK_A가 되는거죠.
그런 상태에서 A테이블을 다시 만들고 PK_A를 만들려고 하면 PK_A가 이미 있기 때문에 에러가 납니다.
이는 A테이블에 PK가 이미 있다는것이 아니고 PK_A라는 오브젝트가 이미 있다는거죠.
테이블의 이름을 바꿀때 PK의 이름도 적절히 바꾸시면 안 햇갈리시겠네요.
테이블은 고유의 Object ID를 가집니다.
이 Object ID는 이름을 바꾸어도 바뀌지 않습니다.
Default나 Primary Key는 테이블과 종속관계에 있는데 이때 이름으로 참조하는게 아니고 Object ID로 참조합니다.
따라서 테이블의 이름을 바꾸고 동일하게 Default나 Primary Key를 적용하려고 하면 문제가 생기죠.