外键DDL在Oracle运行正常,在mysql报异常如何解决
发表于:2025-02-07 作者:千家信息网编辑
千家信息网最后更新 2025年02月07日,这篇文章将为大家详细讲解有关外键DDL在Oracle运行正常,在mysql报异常如何解决,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。记一个Mysql外键约束设计缺
千家信息网最后更新 2025年02月07日外键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安全错误
数据库的锁怎样保障安全
台州微广网络技术
南充网络技术近期价格
工程索赔网络技术法fftf
优先解决武器网络安全问题
用什么命令选择当前数据库
数据库备份到另外一个服务器脚本
linux服务器统计数据
武汉国家网络安全宣传周开幕
信用数据库用户密码更换
外文科技期刊数据库定义
软件开发竞争公平
2021网络安全培训知识
实体餐饮店的数据库
计算机网络技术职位介绍
广州市舜佶网络技术有限公司
数据库技术的具体运用有哪些
红河网络安全前途
贵阳软件开发工资多少钱
郑州 联通网络技术研究院
超级变脸软件开发
网络安全博览会2018
安易软件找不到数据库
网络安全教育教师培训记录
存储服务器凭证验证失败
软件开发技术价格
西安华为软件开发好进吗
中水渔业数据库
网络安全预警存在的问题
数据库主键唯一吗
软件开发企业评估案例分析