2013-08-26 1 views
-4

예를 들어, 데이터 intregrety 많은 관계로 하나를 만들기 : 독서에서내가 다음 데이터베이스 테이블 레이아웃 작성하는 경우

CREATE TABLE IF NOT EXISTS Users_parent (
ID int(255) NOT NULL AUTO_INCREMENT, 
Username text NOT NULL, 
Password text NOT NULL 
)ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1; 

CREATE TABLE IF NOT EXISTS Users_Child (
ID int(255) NOT NULL AUTO_INCREMENT, 
Firstname varchar(255) NOT NULL, 
SecondName varchar(255) NOT NULL, 
UserID int(255) NOT NULL, 

)ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1; 

CREATE TABLE IF NOT EXISTS Users_OtherChild (
ID int(255) NOT NULL AUTO_INCREMENT, 
Warnings text NOT NULL, 
UserID text NOT NULL 
)ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1; 

UserID가 많은 관계로 하나를 설정하는 외부 키가 될 수있는 모든 같은 스키마 내의 다른 관련 테이블.

이것은 MySQL 데이터베이스 내의 저장 프로 시저 내에서 실행되는 것으로 알고 있지만 부모 테이블과 관련된 모든 하위 정보가 없도록 모든 하위 테이블이 삭제 될 때까지 부모 테이블의 행 삭제를 어떻게 금지합니까?

+0

당신이 계단식 자식 테이블에서 삭제 원인이 부모 테이블에 DELETE를 찾고 계십니까 시행 계단식의 상세한 explaination에 대한 here을 삭제합니다보기? 부모님 삭제를 중지 하시겠습니까? (구현은 이것에 대한 응답에 크게 의존 할 것입니다.) –

+0

@Declan_K 모든 자식 테이블에 연결된 데이터가 없어 질 때까지 부모 행 삭제 방지 –

+0

죄송합니다. 질문에 답할 수 없습니다. '잘 물어 보지 마라'). "모든 하위 테이블에 관련 데이터가 없어 질 때까지"라고 말하면 관련 날짜 삭제가 백그라운드에서 자동으로 수행되기를 기대합니까? 아니면 사용자에게 손상된 날짜가 있음을 경고하고 부모에 대한 삭제를 중지하고 싶습니까? ? –

답변

1

:

는 외부 키를 생성하는 방법에 대한 MySQL의 문서를 사용합니다.

1

외래 키는 상위 테이블을 참조하는 테이블에서 외래 키가 남아있는 동안 (사용자 ID 필드로 참조하는 행에서와 같이) 삭제 된 상위의 모든 행 (ID 포함)을 삭제하지 못하게합니다.

질문 : 왜 당신이 자식 테이블을 삭제 하시겠습니까? 내가 생각하는 당신의 예에서는 필요하지 않습니다. 어떤 아이라도 그 테이블에 남겨지면 참조가 유지됩니다. 당신이 ON DELETE CASCADE 옵션을 사용하여 외부 키를 구현해야 자식 테이블 아래로 부모 테이블에서 삭제 전달 될하기 위해

http://dev.mysql.com/doc/refman/5.6/en/innodb-foreign-key-constraints.html