1

以下の SHOW ENGINE INNODB STATUS の結果は、問題のある ADD FOREIGN KEY クエリを示していますが、なぜ失敗するのかわかりません。参照はすべて問題ありません。mysql チェックでもエラーは発生しません。

下部には、両方のテーブルの SHOW CREATE TABLE の結果も追加しました。

このエラーの理由は何ですか?

LATEST FOREIGN KEY ERROR
------------------------
130628 18:28:22 Transaction:
TRANSACTION 21F28, ACTIVE 0 sec inserting
mysql tables in use 2, locked 2
18 lock struct(s), heap size 3112, 1304 row lock(s), undo log entries 1174
MySQL thread id 12864, OS thread handle 0x7f8171f8d700, query id 107567 localhost root copy to tmp table
ALTER TABLE `entry` ADD FOREIGN KEY (`journal`) REFERENCES  `aqqounts`.`journal`(`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
Foreign key constraint fails for table `aqqounts`.`#sql-389_3240`:
,
  CONSTRAINT `?sql?389_3240_ibfk_1` FOREIGN KEY (`journal`) REFERENCES `journal` (`id`)
Trying to add in child table, in index `journal` tuple:
DATA TUPLE: 2 fields;
 0: len 4; hex 00000199; asc     ;;
 1: len 2; hex 0cfe; asc   ;;

But in parent table `aqqounts`.`journal`, in index `PRIMARY`,
the closest match we can find is record:
PHYSICAL RECORD: n_fields 8; compact format; info bits 0
 0: len 4; hex 0000019a; asc     ;;
 1: len 6; hex 000000021ec9; asc       ;;
 2: len 7; hex 6500000e3b2f19; asc e   ;/ ;;
 3: len 4; hex 00000003; asc     ;;
 4: len 4; hex 51cda573; asc Q  s;;
 5: len 4; hex 51cdac00; asc Q   ;;
 6: len 3; hex 8fb39e; asc    ;;
 7: len 4; hex 00000000; asc     ;;


| entry | CREATE TABLE `entry` (
  `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
  `updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `journal` int(11) unsigned NOT NULL,
  `date` date DEFAULT NULL,
  `ledger` int(4) NOT NULL DEFAULT '2900',
  `amount` decimal(12,2) NOT NULL,
  `vat` int(2) NOT NULL DEFAULT '0',
  `relation` varchar(30) NOT NULL,
  `description` varchar(250) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `journal` (`journal`)
) ENGINE=InnoDB AUTO_INCREMENT=5301 DEFAULT CHARSET=utf8 |


| journal | CREATE TABLE `journal` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `user` int(11) unsigned DEFAULT NULL,
  `created` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT 'trigger is needed',
  `updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `date` date DEFAULT NULL,
  `account` int(11) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1042 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci |
4

1 に答える 1

0

おそらく、列のentry下のテーブルに無効なデータが既に保存されているためです。たとえば、 where = 1 にレコードがあり、 にレコードがない場合などです。journalentryjournaljournal

また、外部キーに同じ名前を付けるようにしてくださいjournaljournalIdentryjournalId

于 2013-06-28T17:44:22.203 に答える