外键DDL在Oracle运行正常,在mysql报异常如何解决
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章将为大家详细讲解有关外键DDL在Oracle运行正常,在mysql报异常如何解决,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。记一个Mysql外键约束设计缺
千家信息网最后更新 2026年11月03日外键DDL在Oracle运行正常,在mysql报异常如何解决
这篇文章将为大家详细讲解有关外键DDL在Oracle运行正常,在mysql报异常如何解决,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
记一个Mysql外键约束设计缺陷
背景信息
最近在做项目的数据库迁移,从Oracle到Mysql,一个外键约束在Oracle运行正常,在mysql报异常。(因为才接手没几天,对业务和框架不熟,在处理问题时花了很多时间。)
[2018-08-01 13:34:19] [23000][1452] Cannot add or update a child row: a foreign key constraint fails (`bov`.`PRO_SITES_BRANDREQUEST`, CONSTRAINT `AA` FOREIGN KEY (`ID`) REFERENCES `PRO_SITES_SETUPREQUEST` (`ID`) ON DELETE CASCADE)
Oracle的DDL
drop table Models;CREATE TABLE Models( ModelID number(6) PRIMARY KEY, Name VARCHAR(40));drop table Orders;CREATE TABLE Orders( ModelID number(8) PRIMARY KEY, Description VARCHAR(40), FOREIGN KEY (ModelID) REFERENCES Models (ModelID) ON DELETE cascade);insert into Models(ModelID, Name) values (1,'model');insert into Orders(ModelID,Description) values (1,'order');
select * from Models;1 modelselect * from Orders;1 order
Mysql的DDL
drop table Models;CREATE TABLE Models( ModelID decimal(6,0) PRIMARY KEY, Name VARCHAR(40));drop table Orders;CREATE TABLE Orders( ModelID decimal(8,0) PRIMARY KEY, Description VARCHAR(40), FOREIGN KEY (ModelID) REFERENCES Models (ModelID) ON DELETE cascade);insert into Models(ModelID, Name) values (1,'model');insert into Orders(ModelID,Description) values (1,'order');
在执行最后一句时,报异常
[2018-08-01 14:06:16] [23000][1452] Cannot add or update a child row: a foreign key constraint fails (`bov`.`Orders`, CONSTRAINT `Orders_ibfk_1` FOREIGN KEY (`ModelID`) REFERENCES `Models` (`ModelID`) ON DELETE CASCADE)
原因:Models的ModelID是decimal(6,0),而Orders的ModelID是decimal(8,0),两个通过外键相连。因为类型不一致,mysql就不会认为其一定不等,而oracle可以做到不同类型的相容判等。
解决方案
drop table Orders;CREATE TABLE Orders( ModelID decimal(6,0) PRIMARY KEY, Description VARCHAR(40), FOREIGN KEY (ModelID) REFERENCES Models (ModelID) ON DELETE cascade);insert into Orders(ModelID,Description) values (1,'order');
select * from Models;1 modelselect * from Orders;1 order
总结
Mysql的外键约束设计有缺陷,如果不同单位的字段一定不同,应在添加FOREIGN KEY就报异常,而不是模棱两可的因为类型不同,但实际数值相等,其判断为不等于。
数据库表维护的时候,不同table中,意义相同的column,类型一定要保持一致。
关于外键DDL在Oracle运行正常,在mysql报异常如何解决就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
不同
类型
运行
一致
数据
数据库
更多
篇文章
缺陷
设计
不错
实用
模棱
相同
模棱两可
业务
两个
信息
内容
单位
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
湖南永感互联网科技有限公司
圆梦互联网科技
金融科技 互联网金融
万易互联网科技
易通互联网络科技有限公司
苏州大垚互联网科技
互联网科技美容
居家互联网科技有限公司
西藏七维空间互联网科技有限公司
银川新华互联网科技职业技术培训学校图片
常德市电业局互联网科技部
南山科技园互联网公司有哪些
昭通互联网科技选哪家
内蒙古九一互联网科技
互联网在线教育科技创业
高科技互联网套路
厦门江牛科技互联网
风投北京互联网科技
中国互联网公司的科技投入
如何强化互联网金融科技
百单网互联网科技有限公司
广州万易互联网科技有限公司
华服互联网科技怎么样
河南真二互联网科技有限公司
互联网扶贫科技
华宇互联网科技
撒么互联网科技公司
居家互联网科技有限公司
华夏互联网科技业
工业互联网山东科技大学