sql >> Databasteknik >  >> RDS >> Mysql

MySQL många-till-många-relation med UTLÄNDSKA NYCKLAR

Du kommer inte att se något i Films_Genres tabell tills du uttryckligen infogar något i den. Referensintegritet genom PK och FK är inte till för att fylla dina tabeller åt dig.

Din MySql-kod för att infoga en ny post i Films_Genres , om det är en ny film som motsvarar en ny genre, kan se ut som

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

På php-sidan för att få ett nyligen tilldelat id för ett autoinkrementerat fält använd $mysqli->insert_id .

Om du nu vill skapa en ny film och tilldela den till flera genrer samtidigt kan du göra

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

Här är SQLFiddle demo



  1. Hur man uppgraderar PostgreSQL10 till PostgreSQL11 med noll driftstopp

  2. använda nollor i ett mysqli-förberedt uttalande

  3. Hur man ändrar tabell i SQL Server genom att använda Alter Statement - SQL Server / T-SQL självstudie del 35

  4. SQL:När det gäller NOT IN och NOT Equal TO, vilket är mer effektivt och varför?