Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Hubungan banyak-ke-banyak MySQL dengan KUNCI ASING

Anda tidak akan melihat apa pun di Films_Genres tabel sampai Anda secara eksplisit memasukkan sesuatu ke dalamnya. Integritas referensial melalui PK dan FK bukan untuk mengisi tabel Anda untuk Anda.

Kode MySql Anda untuk memasukkan catatan baru di Films_Genres , jika itu adalah film baru yang sesuai dengan genre baru, mungkin terlihat seperti

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

Di sisi php untuk mendapatkan id yang baru ditetapkan untuk bidang yang bertambah secara otomatis, gunakan $mysqli->insert_id .

Sekarang jika Anda ingin membuat film baru dan menetapkannya ke beberapa genre sekaligus, Anda dapat melakukannya

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

Ini 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. Bagaimana cara mudah menentukan usia dari ulang tahun? (php)

  2. MySQL - PERBARUI beberapa baris dengan nilai berbeda dalam satu kueri

  3. Kueri menggunakan group_concat hanya mengembalikan satu baris

  4. Adakah tutorial basis data relasional yang bagus?

  5. Optimasi database MYSQL menggunakan pengindeksan