六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

外鍵DDL在Oracle運行正常,在mysql報異常以及處理方案

[摘要]記一個Mysql外鍵約束設計缺陷背景信息最近在做項目的數據庫遷移,從Oracle到Mysql,一個外鍵約束在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    model

select * 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    model

select * from Orders;
1    order

總結

  1. Mysql的外鍵約束設計有缺陷,如果不同單位的字段一定不同,應在添加FOREIGN KEY就報異常,而不是模棱兩可的因為類型不同,但實際數值相等,其判斷為不等于。

  2. 數據庫表維護的時候,不同table中,意義相同的column,類型一定要保持一致。

相關文章:

MySQL外鍵約束方式_MySQL

MySQL的外鍵約束級聯刪除

相關視頻:

獵豹網MySQL視頻教程

以上就是外鍵DDL在Oracle運行正常,在mysql報異常以及解決方案的詳細內容,更多請關注php中文網其它相關文章!


學習教程快速掌握從入門到精通的SQL知識。




主站蜘蛛池模板: 日本欧美一区二区三区 | 日韩国产在线 | 色综合久久综合欧美综合图片 | 天天噜天天干 | 天堂在线最新版www中文 | 日韩成人毛片高清视频免费看 | 日韩精品在线观看免费 | 天天拍天天干 | 色天使在线播放 | 伊人久久大香现线蕉 | 啪啪免费视频网站 | 日日摸夜夜添夜夜添特色大片 | 伊人久久大香线蕉免费视频 | 速度与激情9在线观看 | 四虎视屏 | 青娱乐在线视频盛宴 | 日本在线视频网 | 日本亚洲乱码中文字幕影院 | 亚洲最稳定资源在线观看 | 青青青国产色视频在线观看 | 手机看片欧美日韩 | 亚洲福利视频一区二区三区 | 四虎永久在线免费观看 | 日日拍夜夜拍 | 亚洲国产成人精彩精品 | 欧美午夜在线 | 日韩理论片在线观看电视 | 日本中文字幕网 | 亚洲精品在线观看91 | 亚洲成综合人影院在院播放 | 午夜国产视频 | 欧美视频在线免费播放 | 四虎影院永久网站 | 凸凹在线视频 | 日本视频在线免费看 | 亚洲福利二区 | 日本特黄aaaaaaa大片 | 午夜黄视频 | 日本免费一区二区视频 | 欧洲美女高清一级毛片 | 在线免费观看亚洲视频 |