--
创建测试主表.
ID
是主键.
CREATE
TABLE
test_main
(
id
INT
NOT
NULL,
value
VARCHAR(10),
PRIMARY
KEY(id)
)
--
创建测试子表.
CREATE
TABLE
test_sub
(
id
INT
NOT
NULL,
main_id
INT
,
value
VARCHAR(10),
PRIMARY
KEY(id)
)
--
插入测试主表数据.
INSERT
INTO
test_main(id,
value)
VALUES
(1,
'ONE')
INSERT
INTO
test_main(id,
value)
VALUES
(2,
'TWO')
--
插入测试子表数据.
INSERT
INTO
test_sub(id,
main_id,
value)
VALUES
(1,
1,
'ONEONE')
INSERT
INTO
test_sub(id,
main_id,
value)
VALUES
(2,
2,
'TWOTWO')
然后,创建外键,使用
ON
DELETE
CASCADE
选项,删除主表的时候,同时删除子表
ALTER
TABLE
test_sub
ADD
CONSTRAINT
main_id_cons
FOREIGN
KEY
(main_id)
REFERENCES
test_main
ON
DELETE
CASCADE
执行删除:
DELETE
FROM
TEST_MAIN
WHERE
ID
=
1
最后:
SELECT
*
FROM
TEST_MAIN
结果子表中就只有ID=2的记录,也就说明级联删除成功。
按照你现在这两个表的设计来看,最简单的改法就是,把SmallClassID表中的BigClassName和EnBigClassName这两个字段去掉,换成BigClassID这个字段,存放它上级目录的ID,设置成外键字段,指向BigClass表中的主键。然后你在代码里面生成目录的时候,先生成一级目录,例如:
Select
*
from
BigClass
这样就可以把一级节点都生成,然后再对每个一级节点生成其下级节点,比个给产品分类这个节点生成下级节点,可以用:
Select
*
from
SmallClass
where
BigClassID
=
46(即取当前节点对应的ID)
这样就可以查到它的子节点了。
这个是对你改动最小的,但是最好的实现方法是只用一张表去实现,设置一个ParentID的字段,存储其父节点的ID,也就是一个指向自己这张表的外键,然后用递归算法去生成目录,这样就比较灵活,不管有几级的目录都可以。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)