我需要一些帮助来理解外键和级联如何工作。我理解这个理论,但是我把这些理论应用到一个现实世界的例子中会遇到麻烦。
假设我有以下表(以及可能引用表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
- table的表x_tags
。news_tags
和其他每个代码x_tags
中的所有相应条目也应该被删除。我担心为了这个目的我可能不得不重新访问我的表格结构,但这没关系,因为我只想弄清楚它是如何起作用的。
任何指向优秀教程,SQL查询或JPA示例的链接都表示赞赏!
答案 0 :(得分:2)
你似乎在提议这样的事情,这对我来说听起来很合理:
CREATE TABLE tags
(
id INTEGER NOT NULL,
name VARCHAR(20) NOT NULL,
UNIQUE (id),
UNIQUE (name)
);
CREATE TABLE news
(
id INTEGER NOT NULL,
title VARCHAR(30) NOT NULL,
content VARCHAR(200) NOT NULL,
UNIQUE (id)
);
CREATE TABLE news_tags
(
news_id INTEGER NOT NULL,
tags_id INTEGER NOT NULL,
UNIQUE (tags_id, news_id),
FOREIGN KEY (news_id)
REFERENCES news (id)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY (tags_id)
REFERENCES tags (id)
ON DELETE CASCADE
ON UPDATE CASCADE
);