본문 바로가기
MySql

MySQL 외래 키와 MySQL 다 대다 관계

by 베이스 공부 2020. 12. 28.
반응형

내 MySQL 데이터베이스에서 다 대다 관계를 만들려고합니다. 세 개의 테이블이 있습니다. 영화 , 장르 Films_Genres . 다음 코드를 사용하여 설정하고 있습니다.

CREATE TABLE Films
(  
    id INT NOT NULL AUTO_INCREMENT,
    PRIMARY KEY(id),   
    Title VARCHAR(255)
),  

CREATE TABLE Genres
(  
    id INT NOT NULL AUTO_INCREMENT,   
    PRIMARY KEY(id),  
    Name VARCHAR(255)
),

CREATE TABLE Films_Genres
(
    film_id INT NOT NULL,  
    genre_id INT NOT NULL,  
    PRIMARY KEY (film_id, genre_id),  
    FOREIGN KEY (film_id) REFERENCES Films(id) ON UPDATE CASCADE,  
    FOREIGN KEY (genre_id) REFERENCES Genres(id) ON UPDATE CASCADE
)  

그러나 다음과 같이 테이블에 일부 값을 삽입하려고 할 때 :

INSERT INTO Films (Title) VALUES ('$title')
INSERT INTO Genres (Name) VALUES ('$genre')

Films 테이블에서 새로운 Film을 볼 수 있고 Genres 테이블에서 새로운 Genre를 볼 수 있지만 Films_Genres 테이블이 업데이트되지 않습니다. 새 행이 없습니다 (phpMyAdmin을 통해 확인 중입니다).

내가 도대체 ​​뭘 잘못하고있는 겁니까?

 

해결 방법

 

명시 적으로 무언가를 삽입 할 때까지 Films_Genres 테이블에 아무것도 표시되지 않습니다. PK 및 FK를 통한 참조 무결성은 테이블을 채우기위한 것이 아닙니다.

새로운 장르에 해당하는 새 영화인 경우 Films_Genres 에 새 레코드를 삽입하기위한 MySql 코드는 다음과 같을 수 있습니다.

INSERT INTO Films (Title) VALUES ('Title1');
SET @film_id = LAST_INSERT_ID();

INSERT INTO Genres (Name) VALUES ('Genre1');
SET @genre_id = LAST_INSERT_ID();

INSERT INTO Films_Genres (film_id, genre_id) VALUES(@film_id, @genre_id);


이제 새 영화를 만들고 한 번에 여러 장르에 할당하려면 할 수 있습니다.

INSERT INTO Films (Title) VALUES ('Title2');
SET @film_id = LAST_INSERT_ID();
-- if you get ids of genre from your UI just use them
INSERT INTO Films_Genres (film_id, genre_id) 
SELECT @film_id, id
  FROM Genres
 WHERE id IN (2, 3, 4);

INSERT INTO Films (Title) VALUES ('Title3');
SET @film_id = LAST_INSERT_ID();
-- if you names of genres you can use them too
INSERT INTO Films_Genres (film_id, genre_id) 
SELECT @film_id, id
  FROM Genres
 WHERE Name IN ('Genre2', 'Genre4');


 

참조 페이지 https://stackoverflow.com/questions/17459762

 

 

반응형

댓글