반응형
내 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
반응형
'MySql' 카테고리의 다른 글
MySQL WHILE 루프의 mysqli 쿼리 (0) | 2020.12.28 |
---|---|
MySQL 여러 열에 대한 MySQL 전체 텍스트 검색 : 결과 혼란 (0) | 2020.12.28 |
MySQL 오늘 날짜가 발생하는지 어떻게 확인합니까? (0) | 2020.12.28 |
MySQL MYSQL 값을 기반으로 특정 색상으로 셀 PHP 강조 (0) | 2020.12.28 |
MySQL GROUP_CONCAT에서 COUNT 사용 (0) | 2020.12.28 |
댓글