[mysql] phpMyAdmin에서 외래 키를 설정 하시겠습니까?

phpMyAdmin을 사용하여 데이터베이스를 설정하고 있습니다. 기본 키에 인덱스 된 두 개의 테이블 ( foobar)이 있습니다. 기본 키를 외래 키로 사용하여 관계형 테이블 ( ) 을 만들려고 합니다.foo_bar

이 테이블을 MyISAM으로 만들었지 만 MyISAM이 외래 키를 지원하지 않는다는 점을 읽었으므로 3 개 모두를 InnoDB로 변경했습니다. 모든 id필드는 INT(11)입니다.

나는 선택하면 foo_bar테이블의 “관계보기”링크를 클릭하고 FK 컬럼으로 설정하려고 database.foo.id하고 database.bar.id그것이 말하는, “인덱스가 정의되지!” 각 열 옆에

내가 무엇을 놓치고 있습니까?

설명 / 업데이트

간단하게하기 위해 phpMyAdmin을 계속 사용하고 싶습니다. 현재 XAMPP를 사용하고 있는데, 이는 PHP / CSS / Javascript에 집중할 수있을 정도로 쉬우 며 phpMyAdmin과 함께 제공됩니다.

또한 명시 적 외래 키를 아직 설정할 수 없지만 관계형 테이블이 있으며 다음과 같이 조인을 수행 할 수 있습니다.

SELECT *
FROM foo
INNER JOIN foo_bar
ON foo.id = foo_bar.foo_id
INNER JOIN bar
ON foo_bar.bar_id = bar.id;

데이터베이스에 FK가 명시 적으로 정의되어 있지 않은 것이 불편합니다.



답변

phpMyAdmin을 사용하여 관계를 설정하려면 두 가지 작업을 수행해야합니다. 우선, 참조 테이블의 외래 키 열에 인덱스를 정의해야합니다 (따라서 foo_bar.foo_id). 그런 다음, 참조 테이블에서 관계보기로 이동하여 참조 된 열 (이 경우 foo.id)과 업데이트시 및 삭제 조치를 선택하십시오.

외래 키는 서로 연결된 여러 테이블이있는 경우 유용하며 특히 참조 옵션을 올바르게 설정하면 삭제 스크립트가 매우 짧아집니다.

편집 : 두 테이블 모두 InnoDB 엔진을 선택했는지 확인하십시오.


답변

phpMyAdmin을 사용하면 “관계”보기를 사용하여 외래 키를 정의 할 수 있습니다. 그러나 MySQL은 “INNO DB”테이블에 대한 외래 제약 조건 만 지원하기 때문에 첫 번째 단계는 사용중인 테이블이 해당 유형인지 확인하는 것입니다.

CHILD 테이블의 PID 열이 PARENT 테이블의 ID 열을 참조하도록 외래 키를 설정하려면 다음을 수행하십시오.

  1. 두 테이블 모두 작업 탭으로 이동하여 유형을 “INNO DB”로 변경하십시오.
  2. ID가 PARENT 테이블의 기본 키 (또는 적어도 색인화 된 열)인지 확인하십시오.
  3. CHILD 테이블에서 PID 컬럼의 인덱스를 정의하십시오.
  4. CHILD 테이블의 구조 탭을 보면서 “필드 추가”섹션 바로 위에있는 “관계보기”링크를 클릭하십시오.
  5. 각 행이 CLIENT 테이블의 색인화 된 열에 해당하는 테이블이 제공됩니다. 각 행의 첫 번째 드롭 다운을 통해 인덱스 된 열이 참조하는 TABLE-> COLUMN을 선택할 수 있습니다. PID 행의 드롭 다운에서 PARENT-> ID를 선택하고 GO를 클릭하십시오.

CHILD 테이블에서 내보내기를 수행하면 PID 열에 대한 외래 키 제약 조건이 생성 된 것을 볼 수 있습니다.


답변

Wikipedia 기사의 요약입니다. PHPmyadmin에서 지정할 수있는 다양한 유형의 관계를 지정합니다. “업데이트 / 삭제시”에 대한 외래 키 옵션 설정에 대한 @Nathan의 의견과 관련이 있기 때문에 여기에 넣고 있지만 의견에는 너무 큽니다. 도움이되기를 바랍니다.

종속

마스터 (참조) 테이블의 행이 삭제 (각각 업데이트) 될 때마다 일치하는 외래 키 열이있는 자식 (참조) 테이블의 각 행도 삭제 (각각 업데이트)됩니다. 이를 연속 삭제 (resp. update [2])라고합니다.

얽매다

참조 된 테이블의 값을 참조하는 외래 키 테이블에 행이 존재하면 값을 업데이트하거나 삭제할 수 없습니다. 마찬가지로 외래 키 테이블에서 참조가있는 한 행을 삭제할 수 없습니다.

조치 없음

NO ACTION과 RESTRICT는 매우 비슷합니다. NO ACTION과 RESTRICT의 주요 차이점은 NO ACTION을 사용하면 테이블을 변경하려고 시도한 후 참조 무결성 검사가 수행된다는 것입니다. RESTRICT는 UPDATE 또는 DELETE 문을 실행하기 전에 점검을 수행합니다. 참조 무결성 검사에 실패하면 두 참조 조치 모두 동일하게 작동합니다. UPDATE 또는 DELETE 문은 오류를 발생시킵니다.

NULL 설정

참조 행의 외래 키 값은 참조 행이 업데이트되거나 삭제 될 때 NULL로 설정됩니다. 이는 참조 테이블의 각 열이 널 입력 가능한 경우에만 가능합니다. NULL의 의미로 인해 외래 키 열에 NULL이있는 참조 행에는 참조 행이 필요하지 않습니다.

기본값으로 설정

SET NULL과 유사하게 참조 행의 외래 키 값은 참조 행이 업데이트되거나 삭제 될 때 열 기본값으로 설정됩니다.


답변

phpmyadmin에서 GUI로 간단히 외래 키를 할당 할 수 있습니다. 테이블을 클릭하고 구조 탭으로 이동하십시오. 아래 그림에서 아래 표와 같이 관계보기를 찾으십시오.

여기에 이미지 설명을 입력하십시오

기본 키 옆에있는 목록 상자에서 단조 키를 할당 할 수 있습니다 (아래 이미지 참조). 저장

여기에 이미지 설명을 입력하십시오

해당 SQL 쿼리가 자동으로 생성되어 실행됩니다.


답변

데이터베이스에 익숙하지 않은 사용자에게는 …. 기존 테이블을 변경해야합니다. 많은 일이 매우 간단 해 보이지만 A와 B 사이에는 항상 무언가가 있습니다.

다른 것보다 먼저 이것을 살펴보십시오 .

  1. P_ID (부모 테이블과 자식 테이블 모두의 부모 ID)가 있는지 확인하십시오.
  2. 물론 그것은 이미 부모에게 채워질 것입니다. 자녀에게 반드시 진실하고 최종적인 방법은 아닙니다. 예를 들어 P_ID # 3 (자식 테이블의 여러 번이 부모 테이블의 원래 P_ID를 가리킬 것입니다).
  3. SQL 탭으로 이동하고 (phpMyAdmin을 사용하고 있으며 다른 것과 비슷해야 함) 다음 명령을 수행하십시오.

    ALTER TABLE child_table_name
    ADD FOREIGN KEY (P_ID)
    REFERENCES parent_table_name (P_ID)
  4. 관계형 뷰에서 구조보다 하위 테이블을 클릭하십시오. 거기서 DB 계획을 완료하십시오. 캐스케이드, 제한 등에 대한이 답변 앞에 좋은 대답이있었습니다. 물론 명령으로 수행 할 수 있습니다 …


답변

외래 키는 테이블의 비 프라임 속성이 phpMyAdmin에서 다른
* 의 프라임 속성을 참조 함을 의미합니다. 먼저 외래 키를 인덱스로 설정하려는 열을 설정하십시오.

그런 다음 관계보기를 클릭하십시오

거기에 외래 키를 설정하는 옵션을 찾을 수 있습니다


답변

InnoDB를 사용하면 ALTER TABLE을 사용하여 테이블에 새로운 외래 키 제약 조건을 추가 할 수 있습니다.

ALTER TABLE tbl_name
    ADD [CONSTRAINT [symbol]] FOREIGN KEY
    [index_name] (index_col_name, ...)
    REFERENCES tbl_name (index_col_name,...)
    [ON DELETE reference_option]
    [ON UPDATE reference_option]

반면 MyISAM이 컨텍스트에서 InnoDB에 비해 이점이 있다면 외래 키 제약 조건을 전혀 만들고 싶은 이유는 무엇입니까? 애플리케이션의 모델 레벨에서이를 처리 할 수 ​​있습니다. 외래 키로 사용하려는 열이 색인화되어 있는지 확인하십시오!