不同级联策略影响行数

来源:8-1 SQL注入器简介及自定义方法实现

qq_你的样子_3

2019-10-09 19:18

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

写回答 关注

2回答

  • 老猿
    2019-10-10 09:48:37
    已采纳

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

    qq_你的样... 回复老猿

    我在下面的回答写了建表语句,你看一下有什么问题吗

    2019-10-10 13:51:28

    共 3 条回复 >

  • qq_你的样子_3
    2019-10-10 13:50:53

    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,才看了看这个东西。

    老猿 回复qq_你的样...

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

    2019-10-12 08:43:00

    共 3 条回复 >

MyBatis-Plus进阶

MyBatis-Plus框架进阶课程

23470 学习 · 118 问题

查看课程

相似问题