php – MySQL与FOREIGN KEYS的多对多关系
发布时间:2020-12-13 13:12:47 所属栏目:PHP教程 来源:网络整理
导读:我正在尝试在我的 MySQL数据库中创建一个多对多的关系.我有三张桌子: 电影,流派和电影.我使用以下代码来设置它们: CREATE TABLE Films( id INT NOT NULL AUTO_INCREMENT,PRIMARY KEY(id),Title VARCHAR(255)),CREATE TABLE Genres( id INT NOT NULL AUTO_I
我正在尝试在我的
MySQL数据库中创建一个多对多的关系.我有三张桌子:
电影,流派和电影.我使用以下代码来设置它们: CREATE TABLE Films ( id INT NOT NULL AUTO_INCREMENT,PRIMARY KEY(id),Title VARCHAR(255) ),CREATE TABLE Genres ( id INT NOT NULL AUTO_INCREMENT,Name VARCHAR(255) ),CREATE TABLE Films_Genres ( film_id INT NOT NULL,genre_id INT NOT NULL,PRIMARY KEY (film_id,genre_id),FOREIGN KEY (film_id) REFERENCES Films(id) ON UPDATE CASCADE,FOREIGN KEY (genre_id) REFERENCES Genres(id) ON UPDATE CASCADE ) 但是,当我尝试在表中插入一些值时: INSERT INTO Films (Title) VALUES ('$title') INSERT INTO Genres (Name) VALUES ('$genre') 我可以看到新的电影电影表和新类型的流派表,但是 我究竟做错了什么?
在您明确插入某些内容之前,您将不会在Films_Genres表中看到任何内容.
PK和FK的参照完整性不是为您填写表. 您的MySql代码用于在Films_Genres中插入新记录,如果它是与新类型对应的新影片,可能看起来像 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); 在php端获取一个新分配的ID为自动增量字段使用 现在,如果你想创建一个新的电影,并将它分配给多个流派,你可以做 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,id FROM Genres WHERE Name IN ('Genre2','Genre4'); 这是SQLFiddle演示 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |