【发布时间】:2012-02-09 11:56:46
【问题描述】:
我需要一些帮助来理解外键和级联是如何工作的。我理解了这个理论,但我很难将这些理论应用到现实世界的例子中。
假设我有以下表格(以及可能引用表格 tags 的任意数量的其他表格):
CREATE TABLE tags (
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) UNIQUE
) Engine=InnoDB;
CREATE TABLE news (
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(63),
content TEXT,
INDEX (title)
) Engine=InnoDB;
所以我创建了另一个表来提供news 和tags 之间的多对多关系:
CREATE TABLE news_tags (
news_id INT UNSIGNED,
tags_id INT UNSIGNED,
FOREIGN KEY (news_id) REFERENCES news (id) ON DELETE ...,
FOREIGN KEY (tags_id) REFERENCES tags (id) ON DELETE ...
) Engine=InnoDB;
我对级联的要求:
- 如果我删除一条新闻,
news_tags中的所有对应条目也应该被删除。 - 同样适用于表
x,稍后可能会使用x_tags-table 添加。 - 如果我删除一个标签,
news_tags和每个后续表x_tags中的所有对应条目也应该被删除。
恐怕我可能不得不为此重新审视我的表结构,但这没关系,因为我只是想弄清楚这些东西是如何工作的。
任何指向优秀教程、SQL 查询或 JPA 示例的链接都非常感谢!
【问题讨论】:
-
正确的sample code(此处为 SQL 语句)比任何即席模式和示例数据格式都更有用。样品请使用
CREATE TABLE和INSERT ... VALUES。所需的结果不需要以示例代码的形式呈现,因为结果是代码的输出,而不是代码本身。
标签: sql jpa foreign-keys constraints cascading-deletes