복붙노트

[SQL] ERROR 1452 : 추가 또는 자식 행을 업데이트 할 수 없습니다 : 외래 키 제약 조건이 실패

SQL

ERROR 1452 : 추가 또는 자식 행을 업데이트 할 수 없습니다 : 외래 키 제약 조건이 실패

아래와 같이 나는 MySQL의 워크 벤치에 테이블을 만들었습니다 :

ORDER 테이블 :

CREATE TABLE Ordre (
  OrdreID   INT NOT NULL,
  OrdreDato DATE DEFAULT NULL,
  KundeID   INT  DEFAULT NULL,
  CONSTRAINT Ordre_pk PRIMARY KEY (OrdreID),
  CONSTRAINT Ordre_fk FOREIGN KEY (KundeID) REFERENCES Kunde (KundeID)
)
  ENGINE = InnoDB;

제품 테이블 :

CREATE TABLE Produkt (
  ProduktID          INT NOT NULL,
  ProduktBeskrivelse VARCHAR(100) DEFAULT NULL,
  ProduktFarge       VARCHAR(20)  DEFAULT NULL,
  Enhetpris          INT          DEFAULT NULL,
  CONSTRAINT Produkt_pk PRIMARY KEY (ProduktID)
)
  ENGINE = InnoDB;

및 ORDER 라인 테이블 :

CREATE TABLE Ordrelinje (
  Ordre         INT NOT NULL,
  Produkt       INT NOT NULL,
  AntallBestilt INT DEFAULT NULL,
  CONSTRAINT Ordrelinje_pk PRIMARY KEY (Ordre, Produkt),
  CONSTRAINT Ordrelinje_fk FOREIGN KEY (Ordre) REFERENCES Ordre (OrdreID),
  CONSTRAINT Ordrelinje_fk1 FOREIGN KEY (Produkt) REFERENCES Produkt (ProduktID)
)
  ENGINE = InnoDB;

그래서 ORDRELINJE 테이블에 값을 삽입 할 때 내가 얻을 :

나는이 주제에 대한 다른 게시물,하지만 행운을 봤어요. 뭔가이나 할 어떤 생각을 감독하고 있습니까?

해결법

  1. ==============================

    1.FOREIGN KEY 제약 조건을 사용하여에서 촬영

    FOREIGN KEY 제약 조건을 사용하여에서 촬영

    당신의 오류 오류 코드 그래서 : 1452 추가 또는 자식 행을 업데이트 할 수 없습니다 : 외래 키 제약 조건은 본질적으로 실패, 당신이 일치하는 행 (OrderID를) 질서 테이블에 존재하지 않는 대한 Ordrelinje 테이블에 행을 추가하려는 것을 의미한다.

    당신은 먼저 질서 테이블에 행을 삽입해야합니다.

  2. ==============================

    2.질서 표 참조가 삽입 명령에 제공 OrdreID이 없기 때문에이 제약 조건 검사를 받고있다.

    질서 표 참조가 삽입 명령에 제공 OrdreID이 없기 때문에이 제약 조건 검사를 받고있다.

    Ordrelinje에 값을 삽입하려면 먼저 질서 테이블에 값을 입력하고 Orderlinje 테이블에 같은 OrdreID을 사용해야합니다.

    또는 당신은 NOT NULL 제약을 제거하고에 NULL 값을 삽입 할 수 있습니다.

  3. ==============================

    3.당신은 부모 테이블의 기본 키에 대한 해당 외래 키 값을 불러야 새로운 데이터가 부모 테이블의 기본 키와 같은 외래 키 값을 갖는 삽입하면 자식 테이블의 모든 데이터를 삭제하지 않는 자식 테이블에서 데이터를 삭제해야합니다 . 즉 작동합니다. 여기에 또한 YouTube 동영상

    당신은 부모 테이블의 기본 키에 대한 해당 외래 키 값을 불러야 새로운 데이터가 부모 테이블의 기본 키와 같은 외래 키 값을 갖는 삽입하면 자식 테이블의 모든 데이터를 삭제하지 않는 자식 테이블에서 데이터를 삭제해야합니다 . 즉 작동합니다. 여기에 또한 YouTube 동영상

  4. ==============================

    4.우리는 부모 테이블의 참조 / 후보 필드에 존재하지 않는 자식 테이블의 참조 필드에 어떤 값을 가지고 있기 때문에이 오류는 일반적으로 발생합니다.

    우리는 부모 테이블의 참조 / 후보 필드에 존재하지 않는 자식 테이블의 참조 필드에 어떤 값을 가지고 있기 때문에이 오류는 일반적으로 발생합니다.

    우리가 이미 데이터를 가지고, 기존 테이블 (들)에 외래 키 제약 조건을 적용 할 때 때때로, 우리는이 오류가 발생할 수 있습니다. 다른 답변 중 일부는 자식 테이블에서 데이터를 완전히 삭제 한 다음 제약 조건을 적용하기 위해 제안된다. 우리는 이미 자식 테이블에서 작업 / 생산 데이터가있을 때 그러나,이 옵션을 선택하지 않습니다. 대부분의 경우, 우리는 (대신 그들을 삭제하는) 자식 테이블의 데이터를 업데이트해야합니다.

    이제, 우리는 왼쪽 부모 테이블에 일치하는 값이없는 자식 테이블에서 모든 행을 찾기 위해 가입 활용할 수 있습니다. 그 일치하지 않는 행을 가져 오는 데 도움이 될 쿼리 (다른 답변에서 누락)을 것이다 다음 :

    SELECT child_table.* 
    FROM child_table 
    LEFT JOIN parent_table 
      ON parent_table.referenced_column = child_table.referencing_column 
    WHERE parent_table.referenced_column IS NULL
    

    지금, 당신은 일반적으로 데이터를 수정하려면 다음 단계 중 하나 (또는 ​​그 이상) 할 수 있습니다.

    데이터가 고정되면, 우리는 ALTER 표 구문을 사용하여 외래 키 제약 조건을 적용 할 수 있습니다.

  5. ==============================

    5.문제는 FOREIGN KEY 제약 조건이다. 기본으로 (SET의 FOREIGN_KEY_CHECKS = 1). InnoDB 테이블에 대한 외래 키 제약 조건을 확인할지 여부 FOREIGN_KEY_CHECKS 옵션 지정합니다. MySQL의 서 - SET FOREIGN_KEY_CHECKS

    문제는 FOREIGN KEY 제약 조건이다. 기본으로 (SET의 FOREIGN_KEY_CHECKS = 1). InnoDB 테이블에 대한 외래 키 제약 조건을 확인할지 여부 FOREIGN_KEY_CHECKS 옵션 지정합니다. MySQL의 서 - SET FOREIGN_KEY_CHECKS

    우리는 쿼리를 실행하기 전에 해제 등의 외부 키 체크를 설정할 수 있습니다. 안 외래 키.

    당신이 성공적으로 쿼리를 실행할 수, 쿼리를 실행하기 전에이 라인 중 하나를 실행합니다. :)

    1) 세션 (권장)

    SET FOREIGN_KEY_CHECKS=0;
    

    2) 글로벌

    SET GLOBAL FOREIGN_KEY_CHECKS=0;
    
  6. ==============================

    6.외래 키 테이블에 먼저 모든 데이터를 삭제해야하므로 / 기본 키에있는 값에 따라 외래 키 테이블의 값을 조정 관련 될 기본 키 테이블에 소유하지 않은 값을 가지고

    외래 키 테이블에 먼저 모든 데이터를 삭제해야하므로 / 기본 키에있는 값에 따라 외래 키 테이블의 값을 조정 관련 될 기본 키 테이블에 소유하지 않은 값을 가지고

  7. ==============================

    7.이 먼저 부모 테이블에 각각의 기록을 삽입하여 고정 할 수 있으며, 우리는 자식 테이블의 각각의 항목에 레코드를 삽입 할 수 있습니다. 또한 컬럼의 데이터 유형 및 크기를 확인한다. 그것은 부모 테이블의 컬럼과 동일해야한다, 심지어 엔진과 정렬은 동일해야합니다. 이 시도! 이것은 내가 내 해결하는 방법입니다. 올바른 날 오전 잘못된 경우.

    이 먼저 부모 테이블에 각각의 기록을 삽입하여 고정 할 수 있으며, 우리는 자식 테이블의 각각의 항목에 레코드를 삽입 할 수 있습니다. 또한 컬럼의 데이터 유형 및 크기를 확인한다. 그것은 부모 테이블의 컬럼과 동일해야한다, 심지어 엔진과 정렬은 동일해야합니다. 이 시도! 이것은 내가 내 해결하는 방법입니다. 올바른 날 오전 잘못된 경우.

  8. ==============================

    8.귀하의 ORDRELINJE 테이블은 외래 키를 사용하여 ORDER 테이블과 연결된 제약 제약 Ordrelinje_fk 외래 키 (질서) 참조 질서 (OrdreID)하는 질서 INT NOT NULL에 따라, 테이블 ORDRELINJE의 열이 ORDER 테이블의 질서 INT NOT NULL 열을 일치해야합니다.

    귀하의 ORDRELINJE 테이블은 외래 키를 사용하여 ORDER 테이블과 연결된 제약 제약 Ordrelinje_fk 외래 키 (질서) 참조 질서 (OrdreID)하는 질서 INT NOT NULL에 따라, 테이블 ORDRELINJE의 열이 ORDER 테이블의 질서 INT NOT NULL 열을 일치해야합니다.

    이제 어떻게 여기에 무슨 일이 일어나고하면, ORDRELINJE 테이블에 새 행을 삽입 OrdreID가 존재 여부와는 어떤 주문 ID와 일치하지 않는 한, 컴파일러는 외부 키에 대해 불평하는 경우 FK 제약 Ordrelinje_fk는 ORDER 테이블을 확인하고 있습니다에 따른 경우이다 위반. 이것은 당신이이 오류가 발생하는 이유입니다.

    외래 키는 둘 사이의 링크에 모든 테이블에서 사용하는 다른 테이블의 기본 키입니다. 이 키는 테이블을 작성하는 동안 사용자가 지정하는 외래 키 제약 조건에 의해 구속된다. 데이터에 대한 모든 작업은이 제약을 위반하지 않아야합니다. 이 제약 조건 위반이 같은 오류가 발생할 수 있습니다.

    희망 나는 분명히했다.

  9. ==============================

    9.외부 키 속성 값을 삽입하는 동안, 첫째, 부모 관계의 속성 유형뿐만 아니라, 기본 키 속성 값을 확인 부모와의 관계 일치의 값에, 당신은 쉽게 삽입 / 업데이트 자식 속성 값.

    외부 키 속성 값을 삽입하는 동안, 첫째, 부모 관계의 속성 유형뿐만 아니라, 기본 키 속성 값을 확인 부모와의 관계 일치의 값에, 당신은 쉽게 삽입 / 업데이트 자식 속성 값.

  10. ==============================

    10.당신은 자식 테이블에서 외래 키에 기본 테이블의 참조 키에서 데이터를 추가해야합니다 그 수단은이 accessable 한 단지 기본 키의 데이터를 사용하여 외부 키에 임의의 데이터를 추가하지 마십시오

    당신은 자식 테이블에서 외래 키에 기본 테이블의 참조 키에서 데이터를 추가해야합니다 그 수단은이 accessable 한 단지 기본 키의 데이터를 사용하여 외부 키에 임의의 데이터를 추가하지 마십시오

    외래 키 데이터의 구분

  11. ==============================

    11.나는 나의 부모 테이블이 내 자식 테이블에서 참조 된 모든 값을 한 경우에도이 문제를 얻고 있었다. 문제는 내가 하나의 외래 키에 여러 자식 참조를 추가 할 수있을 것 같았다. 즉 나는 같은 외래 키를 참조 데이터의 다섯 행, MySQL은 나만이 첫 번째 행을 업로드 할 수 있도록 나에게 오류 1452을 제공했다가 있다면.

    나는 나의 부모 테이블이 내 자식 테이블에서 참조 된 모든 값을 한 경우에도이 문제를 얻고 있었다. 문제는 내가 하나의 외래 키에 여러 자식 참조를 추가 할 수있을 것 같았다. 즉 나는 같은 외래 키를 참조 데이터의 다섯 행, MySQL은 나만이 첫 번째 행을 업로드 할 수 있도록 나에게 오류 1452을 제공했다가 있다면.

    무엇 나를 위해 일하면 코드 "SET GLOBAL FOREIGN_KEY_CHECKS = 0"을 입력했다. 내가 MySQL을 밖으로 폐쇄 한 후 다시 시작하고 그 후 나는 오류없이 내 모든 데이터를 업로드 할 수 있었다. 그때 나는 내가 완전히 확실하지 FOREIGN_KEY_CHECKS 무엇인지 모르겠지만 정상으로 시스템 다시 설정 "SET GLOBAL FOREIGN_KEY_CHECKS = 1"을 입력했습니다. 도움이 되었기를 바랍니다!

  12. ==============================

    12.각 테이블에있는 하나 이상의 원료를 (사람은 당신이 가리키는 외부 키를 원하는) 다음 외래 키의 값을 삽입하거나 업데이트 할 수 있습니다 삽입해야

    각 테이블에있는 하나 이상의 원료를 (사람은 당신이 가리키는 외부 키를 원하는) 다음 외래 키의 값을 삽입하거나 업데이트 할 수 있습니다 삽입해야

  13. ==============================

    13.병이 여기에이 짜 : 내 경우는 사후 힘의 존재에 대한 같은를 만들려고했다; 데이터베이스에 커밋하는 동안 오류가 발생했습니다. 솔루션은 처음처럼 다음 게시물을 만드는 것이 었습니다. 나의 이해에서 post_id를은 확인의 존재에 게시물 테이블에 먼저 확인해야했던 좋아하는 테이블에 저장할 수 있다면. 나는 더 나은 그런 식으로 나에게 그 이상의 논리 이후이 방법이 발견 ..

    병이 여기에이 짜 : 내 경우는 사후 힘의 존재에 대한 같은를 만들려고했다; 데이터베이스에 커밋하는 동안 오류가 발생했습니다. 솔루션은 처음처럼 다음 게시물을 만드는 것이 었습니다. 나의 이해에서 post_id를은 확인의 존재에 게시물 테이블에 먼저 확인해야했던 좋아하는 테이블에 저장할 수 있다면. 나는 더 나은 그런 식으로 나에게 그 이상의 논리 이후이 방법이 발견 ..

  14. ==============================

    14.당신이 외래 키를 사용하는 경우, 컬럼의 주문이 삽입 동일해야합니다.

    당신이 외래 키를 사용하는 경우, 컬럼의 주문이 삽입 동일해야합니다.

    예를 들어, 표 2 순서에서 다음 표 2에서 표에서 (사용자 ID, 비밀번호)를 추가하는 경우하는 사용자 ID는 테이블 1의 표 2에서 외래 키 (비밀 번호, 사용자 ID)와 같은 동일 (사용자 ID, 암호)을하지해야합니다.

  15. ==============================

    15.이 씨-Faizan의 다른 답변 @ 읽은 후 나를 도왔다.

    이 씨-Faizan의 다른 답변 @ 읽은 후 나를 도왔다.

    phpMyAdmin에와 쿼리를 기록했다. 나는 워크 벤치에 대해 알고하지 않습니다하지만 다른 답변은 당신을 도울 수 있습니다.

  16. ==============================

    16.당신은 자식 테이블에서 일부 데이터를 삽입 한 후 자식 테이블의 외래 키를 설정 때문에 문제가 발생합니다.

    당신은 자식 테이블에서 일부 데이터를 삽입 한 후 자식 테이블의 외래 키를 설정 때문에 문제가 발생합니다.

    자식 테이블에서 모든 데이터를 제거하십시오, 다음 테이블의 데이터를 삽입, 그것은 작동 / 추가 이후에 외래 키를 설정합니다.

  17. ==============================

    17.ERROR 1452 : 추가 또는 자식 행을 업데이트 할 수 없습니다 : 외래 키 제약 조건이 실패 ....    이러한 유형의 오류가 발생하는 경우 :    그때   가장 먼저   엔진 인 경우 고토이 테이블 설정에서 체크> : InnoDB는 다음의 MyISAM으로의 변경

    ERROR 1452 : 추가 또는 자식 행을 업데이트 할 수 없습니다 : 외래 키 제약 조건이 실패 ....    이러한 유형의 오류가 발생하는 경우 :    그때   가장 먼저   엔진 인 경우 고토이 테이블 설정에서 체크> : InnoDB는 다음의 MyISAM으로의 변경

    (및 삭제 참조 외국 제약)

  18. from https://stackoverflow.com/questions/21659691/error-1452-cannot-add-or-update-a-child-row-a-foreign-key-constraint-fails by cc-by-sa and MIT license