sql >> Database >  >> RDS >> Mysql

MySQL veel-op-veel relatie met FOREIGN KEYS

Je zult niets zien in Films_Genres tabel totdat u er expliciet iets in invoegt.Referentiële integriteit via PK en FK is niet bedoeld om uw tabellen voor u te vullen.

Uw MySql-code voor het invoegen van een nieuw record in Films_Genres , als het een nieuwe film is die overeenkomt met een nieuw genre, zou het eruit kunnen zien als

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);

Gebruik aan de php-kant om een ​​nieuw toegewezen id voor een automatisch verhoogd veld te krijgen $mysqli->insert_id .

Als u nu een nieuwe film wilt maken en deze aan meerdere genres tegelijk wilt toewijzen, kunt u dat doen

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');

Hier is SQLFiddle demo



  1. 3 functies die de dag, de maand en het jaar uit een datum halen in PostgreSQL

  2. Is een RID Lookup sneller dan een Key Lookup?

  3. SQL QUERY meerdere zoekopdrachten in één rij om gegevens uit een andere rij in dezelfde tabel te vinden

  4. Straal van meerdere breedte-/lengtepunten