MYSQL外键ON DELETE和ON UPDATE

时间:2015-10-01 11:10:49

标签: mysql foreign-keys

我的网站有一个用户表和一个电影表。我正在创建一个收藏夹表,以便用户可以将电影保存到收藏夹列表中。问题是关于收藏表,我被建议使用以下内容:

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”会发生什么?

我只是在基本解释之后,因为我目前还没有完全理解这一点。

1 个答案:

答案 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 相同。

  •   
     

...