都是常规字段,脚本可以在项目中下载。depPath是为了查询方便,isParent表示该条是否是父部门。为了简化程序中的逻辑,depPath的设置和isParent的设置我都在存储过程中完成。

    添加部门存储过程如下:

    关于这个存储过程,我说如下几点:

    2.存储过程首先执行插入操作,插入完成后,将受影响行数赋值给result。

    3.然后通过获取刚刚插入的id,赋给result2。

    4.接下来查询父部门的depPath,并且和刚刚生成的id组合后作为刚刚插入部门的depPath。

    5.将父部门的isParent字段更新为true。

    删除部门存储过程

    删除部门也被我写成了存储过程,主要是因为删除过程也要做好几件事,核心代码如下:

    1. DELIMITER $$
    2. USE `vhr`$$
    3. DROP PROCEDURE IF EXISTS `deleteDep`$$
    4. declare ecount int;
    5. declare pid int;
    6. declare pcount int;
    7. select count(*) into ecount from employee where departmentId=did;
    8. if ecount>0 then set result=-1;
    9. else
    10. select row_count() into result;
    11. select count(*) into pcount from department where parentId=pid;
    12. if pcount=0 then update department set isParent=false where id=pid;
    13. end if;
    14. end if;
    15. end$$

    关于这个存储过程,我说如下几点:

    1.一个输入参数表示要删除数据的id,一个输出参数表示删除结果。

    2.如果该部门下有员工,则该部门不能被删除。

    4.删除成功之后,查询删除部门的父部门是否还有其他子部门,如果没有,则将父部门的isParent修改为false。