【问题标题】:MYSQL Foreign Key ON DELETE and ON UPDATEMYSQL 外键 ON DELETE 和 ON UPDATE
【发布时间】:2015-12-29 10:07:25
【问题描述】:

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

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”会怎样?

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

【问题讨论】:

标签: mysql foreign-keys


【解决方案1】:

13.1.17.3 Using FOREIGN KEY Constraints

...

  • CASCADE:删除或更新父表中的行,并自动删除或更新子表中匹配的行。 ON DELETE CASCADEON UPDATE CASCADE 均受支持。在两个表之间,不要定义多个ON UPDATE CASCADE子句作用于父表或子表中的同一列。

    注意

    目前,级联外键操作不激活触发器。

...

  • RESTRICT:拒绝父表的删除或更新操作。指定 RESTRICT(或 NO ACTION)与省略 ON DELETEON UPDATE 子句相同。 p>

  • NO ACTION:标准 SQL 中的关键字。在 MySQL 中,相当于 RESTRICT。 MySQL 服务器拒绝删除或更新操作 父表中是否存在相关的外键值 参考表。一些数据库系统有延迟检查,NO ACTION 是延迟检查。在 MySQL 中,外键约束是 立即检查,因此 NO ACTIONRESTRICT 相同。

...

【讨论】:

    猜你喜欢
    • 2011-10-06
    • 1970-01-01
    • 2013-04-23
    • 2014-10-15
    • 2012-02-11
    • 2014-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多