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

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

外鍵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知識。




主站蜘蛛池模板: 日韩色综合 | 四虎影院免费在线播放 | 中文字幕在线播放不卡 | 人人舔人人爱 | 特级黄一级播放 | 涩涩涩涩涩涩涩涩涩涩 | 夜夜爽天天狠狠九月婷婷 | 日本免费高清视频 | 天天干天天曰天天操 | 性生大片一级毛片免费观看 | 青青草原免费在线视频 | 青草视频免费 | 四虎影视在永久在线观看 2019 | 天天射天天操天天 | 亚洲国产日韩在线观频 | 亚洲免费观看 | 亚洲aav| 无人码一区二区三区视频 | 手机看免费毛片的网站 | 在线观看亚洲免费视频 | 亚洲影院在线播放 | 亚洲产在线精品第一站不卡 | 小视频在线观看免费 | 四虎在线观看一区二区 | 日韩在线视频中文字幕 | 亚洲男人的天堂视频 | 亚洲你懂得 | 无遮挡在线观看 | 青青青爽视频在线观看 | 色非网| 日韩视频免费观看 | 日本五级床片免费 | 伊人色婷婷综在合线亚洲 | 日本在线观看视频 | 在线亚洲精品 | 日韩黄色小说 | 青春草在线视频免费 | 性久久久久久久久久久 | 日韩一级精品视频在线观看 | 色综合天天射 | 人人插人人插 |