2

2 つの間に複合外部キーを持つ 2 つのテーブルがあります。子テーブルに行を挿入しようとすると、親テーブルに値が存在するにもかかわらず、拘束エラーが発生します。

親テーブルの概要は次のとおりです。

CREATE TABLE `residual_reports` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `processor` enum('1','2','3') NOT NULL,
  `posting_date` date NOT NULL DEFAULT '0000-00-00',
  `approved_on` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `posting_date_2` (`processor`,`posting_date`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=latin1

子テーブルには、プロセッサおよび転記日付列への外部キーがあります。

CREATE TABLE `residual_data` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `mid` varchar(29) DEFAULT NULL,
  `processor` enum('1','2','3') NOT NULL,
  `posting_date` date NOT NULL,
  ......
  PRIMARY KEY (`id`),
  KEY `residual_data_ibfk_1` (`processor`,`posting_date`),
  CONSTRAINT `residual_data_ibfk_1` FOREIGN KEY (`processor`, `posting_date`) REFERENCES `residual_reports` (`processor`, `posting_date`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1

プロセッサ = 1、posting_date = 2010-03-10 で、residual_reports テーブルに行を挿入しました。

プロセッサ = 1、posting_date = 2010-03-10 で、residual_data テーブルに挿入しようとすると。

INSERT INTO `residual_data`(processor,posting_date) VALUES ('1','2010-03-10');

私は得る:

[Err] 1452 - 子行を追加または更新できません: 外部キー制約が失敗しました ( residual_data, CONSTRAINT residual_data_ibfk_1FOREIGN KEY ( processor, posting_date) REFERENCES residual_reports( processor, posting_date) ON UPDATE CASCADE)

値が親テーブルに確実に存在することを確認しましたが、それでも外部キー制限エラーが発生します。複合外部キーで欠けているものはありますか?

4

3 に答える 3

2

私はENUMを疑っていますが、その後何かしましたか?価値観などを変えましたか?

于 2010-03-10T17:25:35.890 に答える
0

あなたのコードはそのまま私のために働きます。residual_reportsへの変更がまだコミットされていない可能性はありますか?

于 2010-03-10T17:23:28.733 に答える
0

Mysql のどのバージョンを使用していますか? 列挙値http://bugs.mysql.com/bug.php?id=24985で以前に同様の問題があったようです

于 2010-03-10T17:39:55.030 に答える