我可以要吗?
如果删除来自不同表的相关行,我有一个强制删除行的约束:
node INT UNSIGNED NOT NULL,
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
title VARCHAR(200) NOT NULL,
description MEDIUMTEXT,
category VARCHAR(20) NOT NULL,
parent INT UNSIGNED DEFAULT 0, # here is the parent term id
# if it's 0 the term has no parent
PRIMARY KEY(id),
UNIQUE KEY(name, node, category),
KEY parent(parent),
KEY category(category),
CONSTRAINT terms FOREIGN KEY(node)
REFERENCES nodes(id) ON DELETE CASCADE ON UPDATE RESTRICT
如果“父”项被删除,我想要另一个强制自动删除行的约束吗? (如果有term parent set)
例子:
node | id | name | title | description | category | parent
___________________________________________________________________
534 | 1 | A | Foooooo | Bla bla... | A | 0
54 | 2 | B | Foooooo | Bla bla... | A | 1
45 | 3 | C | Foooooo | Bla bla... | A | 2
545 | 4 | D | Foooooo | Bla bla... | A | 2
534 | 5 | E | Foooooo | Bla bla... | A | 1
所以条款看起来像:
A
- B
--- C
--- D
- E
所以如果我删除 B,我希望 C 和 D 也被删除, 如果我删除A,那么B、C、D、E也应该被删除……
最佳答案
不存在“条件”约束这样的东西:您的父字段始终 引用另一行(即不允许为 0),或者根本没有约束。
这是一个非常正常的用例,通常您会在父级上使用 ON DELETE TRIGGER
解决它,这也会删除子级,由父级选择它们。
在您的示例中,您可能会考虑类似
CREATE TRIGGER cascade_delete_children
BEFORE DELETE ON node
FOR EACH ROW
DELETE FROM node WHERE parent=OLD.id;
关于mysql - MYsql 中的子-父约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9185941/