数据库级联删除怎么实现

数据库级联删除怎么实现,第1张

可以用下边的方法,仅供参考:

--

创建测试主表.

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,也就是一个指向自己这张表的外键,然后用递归算法去生成目录,这样就比较灵活,不管有几级的目录都可以。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9981916.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存