Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Relacja wiele-do-wielu MySQL z KLUCZAMI OBCYMI

Nie zobaczysz nic w Films_Genres tabeli, dopóki wyraźnie czegoś do niej nie wstawisz. Integralność referencyjna poprzez PK i FK nie służy do zapełniania twoich tabel.

Twój kod MySql do wstawiania nowego rekordu w Films_Genres , jeśli jest to nowy film, który odpowiada nowemu gatunkowi, może wyglądać tak

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

Po stronie php, aby uzyskać nowo przypisany identyfikator dla pola z autoinkrementacją, użyj $mysqli->insert_id .

Teraz, jeśli chcesz stworzyć nowy film i przypisać go do wielu gatunków jednocześnie, możesz to zrobić

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

Oto SQLFiddle demo



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak dodawać adnotacje do pola autoinkrementacji MYSQL za pomocą adnotacji JPA?

  2. MYSQL Left Join Jak wybrać wartości NULL?

  3. SERWER SQL — SQL_NO_CACHE i OPTION (RECOMPILE)

  4. Który jest najszybszy? SELECT SQL_CALC_FOUND_ROWS FROM `tabela` lub SELECT COUNT(*)

  5. Cofanie nieudanej migracji Rails