동일한 테이블의 열에 외래 키 제약 조건 적용
다음 표에 값을 입력하면서 SQL에서 동일한 표의 열에 외래 키 제약 조건을 적용하는 방법:
직원:
- 빈 번호,
- 관리자 번호(기존 직원이어야 함)
Oracle은 이를 자기 참조 무결성 제약 조건이라고 부릅니다.문서는 설명을 위해 여기 있습니다.
일반 제약 조건과 동일한 방식으로 자가 참조 제약 조건을 만듭니다.
alter table employees
add constraint employees_emp_man_fk
foreign key ( manager_no )
references employees ( emp_id )
on delete set null
;
전 당신이 그 일을manager_no
null입니다.여기에 set null을 a로 추가했습니다.delete cascade
아마 상당한 양의 테이블을 쓸어버릴 겁니다
이보다 더 좋은 방법이 없습니다.관리자를 삭제한다고 해서 모든 직원이 삭제되어서는 안 되므로 다음 작업을 수행해야 합니다.set null
관리자가 없는 사람에게 알려줄 수 있는 트리거가 테이블에 있습니다.
저는 항상 이 사이트를 좋아해요. 간단한 참고 자료로 사용하기 좋아요.그리고 FK에 대한 지수를 가지고 있는 것을 잊지 마세요. 그렇지 않으면 톰이 당신에게 소리칠 것입니다 :-).
또한 표준 Oracle 구문을 사용하여 create table 문에 자체 참조 FK를 생성할 수 있습니다. 이는 다음과 같습니다.
create table employees
( emp_id number
, other_columns ...
, manager_no number
, constraint employees_pk
primary key (emp_id)
, constraint employees_man_emp_fk
foreign key ( manager_no )
references employees ( emp_id )
on delete set null
);
편집:
아래 @popstack의 의견에 대한 답변:
한 진술에서 이렇게 할 수는 있지만 테이블을 바꿀 수 없다는 것은 상당히 우스꽝스러운 상황입니다.선택하려는 테이블을 분석해야 하며, 외부 키를 사용할 때마다 외부 키에 대한 인덱스(및 가능하면 더 많은 열 및/또는 더 많은 인덱스)를 원할 수도 있습니다.위에 톰에게 물어볼 제 링크를 보세요.
테이블을 변경할 수 없다면 중요도의 내림차순으로 변경해야 합니다.
- 어떻게 할 수 있는지 알아보세요.
- FK에 인덱스가 있어야 하므로 DB 설계를 변경하고 인덱스가 없으면 FK를 사용할 수 없습니다.관리자 테이블과 직원 테이블이 있을까요?
자체 참조 쿼리...
Alter table table_name ADD constraints constraints_name foreign key(column_name1,column_name2..) references table_name(column_name1,column_name2...) ON DELETE CASCADE;
EX-ALTER TABLE Employee ADD CONSTRAINTS Fr_key( mgr_no) references employee(Emp_no) ON DELETE CASCADE;
CREATE TABLE TABLE_NAME (
`empid_number` int ( 11) NOT NULL auto_increment,
`employee` varchar ( 100) NOT NULL ,
`manager_number` int ( 11) NOT NULL ,
PRIMARY KEY (`empid_number`),
CONSTRAINT `manager_references_employee`
FOREIGN KEY (`manager_number`) REFERENCES (`empid_number`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
도움이 되길 바랍니다!
언급URL : https://stackoverflow.com/questions/8768118/enforce-a-foreign-key-constraint-to-columns-of-same-table
'programing' 카테고리의 다른 글
객실 유지 라이브러리.모두삭제 (0) | 2023.10.11 |
---|---|
Oracle에서 ID 열을 재설정하는 방법 (0) | 2023.10.11 |
번역 문자열을 각번역으로 가장 잘 구성하는 방법은? (0) | 2023.10.11 |
내용과 정확하게 일치하는 요소 선택 (0) | 2023.10.11 |
xPath selector 온라인 테스터가 있습니까? (0) | 2023.10.01 |