[SQL] 다른 테이블에 외래 키를 포함하는 테이블에서 행을 삭제하는 방법
SQL다른 테이블에 외래 키를 포함하는 테이블에서 행을 삭제하는 방법
기본 키를 포함하는 기본 테이블이이 기본 테이블에 대한 외부 키를 포함하는 다른 테이블이 가정하자. 우리는 기본 테이블의 행을 삭제하면 그래서 그것은 또한 자식 테이블을 삭제합니다.
어떻게이 쿼리를 작성합니까?
해결법
-
==============================
1.귀하의 질문에서, 나는 당신이 계단식 DELETES이 켜져 있다고 가정하는 것이 안전하다고 생각합니다. 이 경우에 필요한 모든입니다
귀하의 질문에서, 나는 당신이 계단식 DELETES이 켜져 있다고 가정하는 것이 안전하다고 생각합니다. 이 경우에 필요한 모든입니다
DELETE FROM MainTable WHERE PrimaryKey = ???
당신이 데이터베이스 엔진은 해당 참조 레코드를 삭제 처리됩니다.
-
==============================
2.첫째, 운동을 데이터-스크러빙 한 시간으로, 예를 들어, 고아 행을 삭제
첫째, 운동을 데이터-스크러빙 한 시간으로, 예를 들어, 고아 행을 삭제
DELETE FROM ReferencingTable WHERE NOT EXISTS ( SELECT * FROM MainTable AS T1 WHERE T1.pk_col_1 = ReferencingTable.pk_col_1 );
둘째, 한 번 스키마 변경 운동으로, 예를 들어, 참조하는 테이블에 외부 키에 DELETE CASCADE 참조 켜기 작업을 추가
ALTER TABLE ReferencingTable DROP CONSTRAINT fk__ReferencingTable__MainTable; ALTER TABLE ReferencingTable ADD CONSTRAINT fk__ReferencingTable__MainTable FOREIGN KEY (pk_col_1) REFERENCES MainTable (pk_col_1) ON DELETE CASCADE;
자신의 참조 행이 삭제 될 때 다음, 영원, 참조하는 테이블의 행이 자동으로 삭제됩니다.
-
==============================
3.아래 그림과 같이 삭제 cascade 옵션을 외래 키 제약 조건을 변경할 수 있습니다. 삭제 할 때 마스터 테이블 행에 관련된 chind 테이블 행을 삭제합니다.
아래 그림과 같이 삭제 cascade 옵션을 외래 키 제약 조건을 변경할 수 있습니다. 삭제 할 때 마스터 테이블 행에 관련된 chind 테이블 행을 삭제합니다.
ALTER TABLE MasterTable ADD CONSTRAINT fk_xyz FOREIGN KEY (xyz) REFERENCES ChildTable (xyz) ON DELETE CASCADE
-
==============================
4.당신은 다중 행이있는 경우 삭제하고 당신은 당신의 테이블의 구조를 변경하지 않으 당신은 커서를 사용할 수 있습니다. 1 - 먼저 (커서에서) 삭제 행을 선택해야합니다 2 그런 다음 커서의 각 행에 대해 당신이 참조하는 행을 삭제하고 그 후 그에게 행에게 자기를 삭제합니다.
당신은 다중 행이있는 경우 삭제하고 당신은 당신의 테이블의 구조를 변경하지 않으 당신은 커서를 사용할 수 있습니다. 1 - 먼저 (커서에서) 삭제 행을 선택해야합니다 2 그런 다음 커서의 각 행에 대해 당신이 참조하는 행을 삭제하고 그 후 그에게 행에게 자기를 삭제합니다.
전의:
--id is primary key of MainTable declare @id int set @id = 1 declare theMain cursor for select FK from MainTable where MainID = @id declare @fk_Id int open theMain fetch next from theMain into @fk_Id while @@fetch_status=0 begin --fkid is the foreign key --Must delete from Main Table first then child. delete from MainTable where fkid = @fk_Id delete from ReferencingTable where fkid = @fk_Id fetch next from theMain into @fk_Id end close theMain deallocate theMain
희망 유용
-
==============================
5.삭제 폭포에서와 외래 키 옵션을 설정해야합니다 ... 외래 키 열이 포함 된 테이블에 .... 그것은 ALTER 테이블을 사용하여 나중에 테이블 작성시 설정하거나 추가 할 필요가
삭제 폭포에서와 외래 키 옵션을 설정해야합니다 ... 외래 키 열이 포함 된 테이블에 .... 그것은 ALTER 테이블을 사용하여 나중에 테이블 작성시 설정하거나 추가 할 필요가
from https://stackoverflow.com/questions/3656099/how-to-delete-rows-in-tables-that-contain-foreign-keys-to-other-tables by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 단지 SQL과 파일에 MySQL 데이터베이스에서 물방울 내보내기 (0) | 2020.07.23 |
---|---|
[SQL] 오라클 : 어떻게 이상의 범위 "에 의해 그룹"에? (0) | 2020.07.23 |
[SQL] 두 개의 SQL 쿼리를 가입 (0) | 2020.07.23 |
[SQL] 항목의 모든 조상을 얻는다 SQL 재귀 쿼리 (0) | 2020.07.23 |
[SQL] sqlite3를 새로운 테이블로 복사 테이블 구조 (0) | 2020.07.23 |