为了账号安全,请及时绑定邮箱和手机立即绑定

不同级联策略影响行数

这个不同的级联策略影响的行数还不一样呀?使用案例中的这个数据库表级联策略为cascade时影响的row为1,级联策略为set null时影响的行数为记录的条数

正在回答

2 回答

你好,我使用mysql5.7做实验,进行级联删除策略设置,例如我删除一个角色表中的数据,持有该角色的用户表的用户也跟着级联删除或者设置为set null,并且持有该角色的用户都是2条,两种不同策略下的执行delete角色操作,影响的row都显示为1,没出现你说的情况,请问你是使用什么数据库的什么版本,怎样设置,怎么操作的出现了上述情况?

0 回复 有任何疑惑可以回复我~
#1

qq_你的样子_3 提问者

我的数据库版本是mysql 5.5 级联策略为cascade时执行:delete from user。结果为:共 1 行受到影响 级联策略为set null时执行:delete from user。结果为:共 5 行受到影响
2019-10-10 回复 有任何疑惑可以回复我~
#2

老猿 回复 qq_你的样子_3 提问者

刚才我又试验了一遍,设置成set null后,影响行数还是1,你delete掉的user记录确实是一条吗?难道是不同的mysql版本,不一样。
2019-10-10 回复 有任何疑惑可以回复我~
#3

qq_你的样子_3 提问者 回复 老猿

我在下面的回答写了建表语句,你看一下有什么问题吗
2019-10-10 回复 有任何疑惑可以回复我~

CREATE TABLE USER(

    id BIGINT(20) PRIMARY KEY NOT NULL COMMENT '主键id',

    username VARCHAR(20) DEFAULT NULL COMMENT '姓名',

    age INT NOT NULL DEFAULT 0 COMMENT '年龄',

    email VARCHAR(30) DEFAULT NULL COMMENT '邮箱',

    manager_id BIGINT(20) DEFAULT NULL COMMENT '直属主管id',

    create_time DATETIME DEFAULT NULL COMMENT '创建时间',

    update_time DATETIME DEFAULT NULL COMMENT '修改时间',

    VERSION INT(11) NOT NULL DEFAULT 1 COMMENT '版本',

    deleted INT(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除标识(0:未删除,1:已删除)',

    CONSTRAINT manager_fk FOREIGN KEY (manager_id) REFERENCES USER (id) ON DELETE CASCADE ON UPDATE CASCADE

    -- CONSTRAINT manager_fk FOREIGN KEY (manager_id) REFERENCES USER (id) ON DELETE set null ON UPDATE set null

)ENGINE=INNODB CHARSET=utf8;


INSERT INTO USER (id, username, age, email, manager_id, create_time)

VALUES(10001, '大boss', 40, 'boss@foxmail.com', NULL, '2019-06-06 06:06:06'),

      (10002, '张三丰', 40, 'sanfeng@foxmail.com', 10001, '2019-07-07 07:07:07'),

      (10003, '郭靖', 40, 'guojing@foxmail.com', 10002, '2019-08-08 08:08:08'),

      (10004, '杨过', 35, 'yangguo@foxmail.com', 10002, '2019-08-28 20:08:08'),

      (10005, '张无忌', 20, 'wuji@foxmail.com', 10002, '2019-06-25 15:22:34');


这个是建表以及插入语句,上面设置了两种不同的级联策略,我再看一看吧!!这个就是我在看那个mp自定义sql的时候执行了自定义的delete from user看到最后返回的结果是影响的行数是1,才看了看这个东西。

0 回复 有任何疑惑可以回复我~
#1

老猿

哦,我的操作跟你不一样,所以结果不一样。我跟你一样的操作,结果和你是一样的,设置策略为级联删除的话,我删除了五条记录,但返回的影响行数是1。这应该是数据库的机制,我猜测他是给你删除了大boss那条数据,然后其他四条因为manager_id直接或间接关联到大boss,所以级联删除了。但数据库认为你只直接删了大boss,其他是级联删除,所以影响行数为1.
2019-10-10 回复 有任何疑惑可以回复我~
#2

qq_你的样子_3 提问者 回复 老猿

好吧,那这样的话一般设计表是设计级联策略为not null还是就不进行级联关系的设置,在查询的时候进行逻辑上的级联。O(∩_∩)O哈哈~,随便讨论讨论
2019-10-10 回复 有任何疑惑可以回复我~
#3

老猿 回复 qq_你的样子_3 提问者

我们一般做项目,主外键不设置级联删除和set null。因为这样挺危险的,很多公司不允许这么干。如果有外键关系,不设置级联删除和set null,一般物理删除,先判断该数据的从表中是否有数据引用该数据,如果有通过程序控制,提示不允许删除。如果是逻辑删除的话,因为该数据只是更新,不会涉及到从表的变化。
2019-10-12 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

不同级联策略影响行数

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信