外键DDL在Oracle运行正常,在mysql报异常如何解决
发表于:2025-11-14 作者:千家信息网编辑
千家信息网最后更新 2025年11月14日,这篇文章将为大家详细讲解有关外键DDL在Oracle运行正常,在mysql报异常如何解决,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。记一个Mysql外键约束设计缺
千家信息网最后更新 2025年11月14日外键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安全错误
数据库的锁怎样保障安全
量身定制软件开发
怎么数据库异地备份软件
开展网络安全等级保护
简答简述网络安全的概念
图书馆管理信息数据库视频
嘉兴物联网大数据平台软件开发
数据库删除表命令
万代服务器怎么样
四十大盗网络技术有限公司
国家网络安全宣传周证书有用吗
数据库登陆提示时间不符
计算机网络技术细分
沛县软件开发品质保障
计算机网络技术的专业简介
gmod重置服务器
易语言数据库如何打开
广滕互联网科技有限公司
华为pnf基础软件开发
伟奇网络安全
建设网络安全与信息化
邹平资产管理软件开发
如何查看魔兽服务器
网络安全公益讲座感悟
安微瑄盈软件开发有限公司
太虚幻境服务器联赛名单
房山回收二手服务器新报价
数据库报错22007
服务器合约
蒙泰互联网科技有限公司怎么样
数据库中怎么添加唯一索引