参照完整性(Referential Integrity)报错在数据库使用中非常常见,主要原因可以归纳为以下几类:
参照完整性要求:子表(外键表)中的外键值,必须在父表(主键/唯一键表)中存在。
示例:
-- 父表
CREATE TABLE dept(id INT PRIMARY KEY);
-- 子表
CREATE TABLE emp(id INT, dept_id INT, FOREIGN KEY(dept_id) REFERENCES dept(id));
INSERT INTO emp VALUES(1, 99); -- 报错:dept 中无 99
如果父表记录已被子表引用,直接删除或更新父表主键/唯一键会违反参照完整性。
ON DELETE / ON UPDATE 行为(默认 RESTRICT 或 NO ACTION)RESTRICT 但依然尝试删除示例:
DELETE FROM dept WHERE id = 10;
-- 若 emp 中有 dept_id = 10,则报错
常见但容易被忽略:
INT vs BIGINT)这会导致外键根本无法创建,或运行时行为异常。
尤其在:
mysqldumpON DELETE CASCADE 会自动“补齐”父表参照完整性报错本质是:
“你说有关系,但数据库发现关系对不上”
常见场景一句话总结:
如果你有具体报错信息(如 ORA-02291、1452 - Cannot add、FK constraint fails),我可以帮你精准定位。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。