我的网站有一个用户表和一个电影表。我正在创建一个收藏夹表,以便用户可以将电影保存到收藏夹列表中。问题是关于收藏表,我被建议使用以下内容:
CREATE TABLE Favorites (
user_id INT NOT NULL,
movie_id INT NOT NULL,
PRIMARY KEY (user_id, movie_id),
FOREIGN KEY (user_id) REFERENCES Users(user_id),
FOREIGN KEY (movie_id) REFERENCES Movies(movie_id)
);
我注意到在读取外键时有一个'ON DELETE'和'ON UPDATE'选项,您可以设置限制,级联等...
如果用户喜欢很多电影,然后从电影表中删除其中一部电影,那么如果将外键设置为“CASCADE”会发生什么?收藏夹表格中的任何行也会被删除吗?如果将外键设置为“RESTRICT”会发生什么?
我只是在基本解释之后,因为我目前还没有完全理解这一点。
答案 0 :(得分:0)
13.1.17.3 Using FOREIGN KEY Constraints
...
CASCADE :从父表中删除或更新行,并自动删除或更新子表中的匹配行。支持 ON DELETE CASCADE 和 ON UPDATE CASCADE 。在两个表之间,不要定义几个 ON UPDATE CASCADE 子句,这些子句作用于父表或子表中的同一列。
注意强>
目前,级联外键操作不会激活触发器。
...
RESTRICT :拒绝父表的删除或更新操作。指定 RESTRICT (或 NO ACTION )与省略 ON DELETE 或 ON UPDATE 子句相同。
NO ACTION :标准SQL中的关键字。在MySQL中,相当于 RESTRICT 。 MySQL服务器拒绝删除或更新操作 父表中是否存在相关的外键值 参考表。某些数据库系统具有延迟检查, NO 行动是延期检查。在MySQL中,外键约束是 立即检查,因此 NO ACTION 与 RESTRICT 相同。
...