• mysql学习问题-Cannot delete or update a parent row


    执行语句:DELETE FROM t_dept WHERE dept_no = '30';报错

     Cannot delete or update a parent row: a foreign key constraint fails (`test`.`t_employee`, CONSTRAINT `t_employee_ibfk_1` FOREIGN KEY (`dept_no`) REFERENCES `t_dept` (`dept_no`))

    原因:MySQL设置了foreign key关联,造成无法更新或删除数据。可以通过设置FOREIGN_KEY_CHECKS变量来避免这种情况

    SET FOREIGN_KEY_CHECKS = 0 //关闭外键约束

    进行完操作后记得再把外键约束重新打开;

    SET  FOREIGN_KEY_CHECKS = 1 //打开外键约束

    DROP TABLE t_dept;
    CREATE TABLE t_dept(
        dept_id INT(3) PRIMARY KEY,
        dept_no INT UNIQUE NOT NULL,
        dept_name VARCHAR(20) NOT NULL
    );
    
    DROP TABLE t_employee;
    CREATE TABLE t_employee(
        emp_id INT(3) PRIMARY KEY,
        emp_no INT(3) UNIQUE NOT NULL,
        emp_name VARCHAR(10) NOT NULL,
        emp_age tinyint(4) NOT NULL DEFAULT 25 CHECK (emp_age BETWEEN 20 AND 60),
        sex VARCHAR(1) CHECK (sex in ('','')),
        job VARCHAR(20),
        sal INT(10),
        -- inline写法
        -- REFERENCES 主表(主表字段)
        -- dept_no int  REFERENCES t_dept(dept_no)
    
        -- outline写法
        dept_no int NOT NULL,
        FOREIGN KEY(dept_no) REFERENCES t_dept(dept_no)
    );
    
    insert into t_dept values(1,10,'IT技术部门');
    insert into t_dept values(2,20,'市场部');
    insert into t_dept values(3,30,'人事部');
    
    -- 再插入员工数据
    INSERT INTO `test`.`t_employee` (`emp_id`,`emp_no`,`emp_name`,`emp_age`,`sex`,`job`,`sal`,`dept_no`)
    VALUES(1,1,'张三',25,'','软件开发',8500,10);
    INSERT INTO `test`.`t_employee` (`emp_id`,`emp_no`,`emp_name`,`emp_age`,`sex`,`job`,`sal`,`dept_no`)
    VALUES(2,102,'张天三',29,'','初级软件开发',4500,10);
    INSERT INTO `test`.`t_employee` (`emp_id`,`emp_no`,`emp_name`,`emp_age`,`sex`,`job`,`sal`,`dept_no`)
    VALUES(3,103,'张一',36,'','测试人员',7500,10);
    INSERT INTO `test`.`t_employee` (`emp_id`,`emp_no`,`emp_name`,`emp_age`,`sex`,`job`,`sal`,`dept_no`)
    VALUES(4,104,'王张三',63,'','人事主管',12500,20);
    INSERT INTO `test`.`t_employee` (`emp_id`,`emp_no`,`emp_name`,`emp_age`,`sex`,`job`,`sal`,`dept_no`)
    VALUES(5,105,'发呆张三',60,'','高级程序员',18500,10);
    INSERT INTO `test`.`t_employee` (`emp_id`,`emp_no`,`emp_name`,`emp_age`,`sex`,`job`,`sal`,`dept_no`)
    VALUES(6,106,'快乐张三',30,'','销售经理',10500,30);
    
    SELECT * FROM t_employee;
    SELECT * FROM t_dept;
    -- MySQL设置了foreign key关联,造成无法更新或删除数据。可以通过设置FOREIGN_KEY_CHECKS变量来避免这种情况。
    -- Cannot delete or update a parent row: a foreign key constraint fails (`test`.`t_employee`, CONSTRAINT `t_employee_ibfk_1` FOREIGN KEY (`dept_no`) REFERENCES `t_dept` (`dept_no`))
    DELETE FROM t_dept WHERE dept_no = '30';
    
    SET FOREIGN_KEY_CHECKS = 0;
    DELETE FROM t_dept WHERE dept_no = '30';
    -- 删除完后记得外键约束重新打开;
    SET FOREIGN_KEY_CHECKS = 1;
  • 相关阅读:
    关于色彩空间 color space的faq
    opensuse11 DNS不稳定的问题
    Streaming MPEG4 with Linux
    在RELEASE版本中快速定位DATA ABORT的方法 zt
    YUV / RGB 格式及快速转换算法zt
    角色转变——从工程师到项目经理(转)
    coredll.lib(COREDLL.dll) : fatal error LNK1112: module machine type 'THUMB' conflicts with target machine type 'ARM'
    勿使用浮点运算
    DirectShow中常见的RGB/YUV格式
    基于Linux系统核心的汉字显示的尝试zt
  • 原文地址:https://www.cnblogs.com/shishibuwan/p/10862159.html
Copyright © 2020-2023  润新知