Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Mối quan hệ nhiều-nhiều của MySQL với NGOẠI KHÓA

Bạn sẽ không thấy bất kỳ thứ gì trong Films_Genres cho đến khi bạn chèn một cách rõ ràng thứ gì đó vào trong đó. Tính toàn vẹn theo cấp số nhân thông qua PK và FK không phải để điền các bảng của bạn cho bạn.

Mã MySql của bạn để chèn bản ghi mới trong Films_Genres , nếu đó là một bộ phim mới tương ứng với một thể loại mới, có thể trông giống như

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

Về phía php để nhận id mới được chỉ định cho trường tự động tăng cường, hãy sử dụng $mysqli->insert_id .

Bây giờ, nếu bạn muốn tạo một bộ phim mới và gán nó cho nhiều thể loại cùng một lúc, bạn có thể thực hiện

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

Đây là SQLFiddle bản 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. Làm cách nào để đặt hai truy vấn trong một mysql_query?

  2. MYSQL chọn giá trị DISTINCT trong hai cột

  3. Xóa các hàng sql trong đó ID không khớp với bảng khác

  4. php:phiên so với cơ sở dữ liệu

  5. Tìm các mẫu số tương tự trong bảng