1

次を使用して、テーブル ag に外部キー制約を追加しようとしています。

alter table ag
add foreign key fk_ag_protein1 (protein_PID) references protein (PID);

しかし、次のエラー メッセージが表示されます。

ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails
(`mux_new`.`#sql-884_3`, CONSTRAINT `#sql-884_3_ibfk_1` FOREIGN KEY (`protein_PID`)
REFERENCES `protein` (`PID`))"

詳細を取得するために、次の出力を確認しました。

SHOW ENGINE INNODB STATUS\G

どれが:

LATEST FOREIGN KEY ERROR
------------------------
TRANSACTION 193923, ACTIVE 0 sec inserting, thread declared inside InnoDB 4999
mysql tables in use 2, locked 2
5 lock struct(s), heap size 1248, 2 row lock(s), undo log entries 1
MySQL thread id 3, OS thread handle 0x1714, query id 143 localhost ::1 root copy
 to tmp table
alter table ag
add foreign key fk_ag_protein1 (protein_PID) references protein (PID)
Foreign key constraint fails for table `mux_new`.`#sql-884_3`:
,
  CONSTRAINT `#sql-884_3_ibfk_1` FOREIGN KEY (`protein_PID`) REFERENCES `protein
 ` (`PID`)
Trying to add in child table, in index `fk_ag_protein1` tuple:
DATA TUPLE: 2 fields;
 0: len 4; hex 80000000; asc     ;;
 1: len 3; hex 002711; asc  ' ;;

But in parent table `mux_new`.`protein`, in index `PRIMARY`,
the closest match we can find is record:
PHYSICAL RECORD: n_fields 1; compact format; info bits 0
 0: len 8; hex 696e66696d756d00; asc infimum ;;

しかし、私はこれをまったく理解していません。テーブル ag には現在いくつかのデータが含まれていますが、タンパク質には含まれていません。

私の問題が何であるか、または確認できることについてのアイデアはありますか?

タンパク質表:

タンパク質出力について説明します。

+---------------------------+---------+------+-----+---------+-------+
| Field                     | Type    | Null | Key | Default | Extra |
+---------------------------+---------+------+-----+---------+-------+
| PID                       | int(11) | NO   | PRI | NULL    |       |
| uniprot_UniprotAC         | char(6) | YES  | MUL | NULL    |       |
| pubmedhits_id             | int(11) | YES  | MUL | NULL    |       |
| internallyDefinedNames_id | int(11) | YES  | MUL | NULL    |       |
| comment                   | int(11) | YES  | MUL | NULL    |       |
+---------------------------+---------+------+-----+---------+-------+

show create table protein の出力:

CREATE TABLE `protein` (
  `PID` int(11) NOT NULL,
  `uniprot_UniprotAC` char(6) COLLATE utf8_unicode_ci DEFAULT NULL,
  `pubmedhits_id` int(11) DEFAULT NULL,
  `internallyDefinedNames_id` int(11) DEFAULT NULL,
  `comment` int(11) DEFAULT NULL,
  PRIMARY KEY (`PID`),
  KEY `fk_protein_uniprot1_idx` (`uniprot_UniprotAC`),
  KEY `fk_protein_pubmedhits1_idx` (`pubmedhits_id`),
  KEY `fk_protein_internallyDefinedNames1_idx` (`internallyDefinedNames_id`),
  KEY `fk_protein_comments1_idx` (`comment`),
  CONSTRAINT `protein_ibfk_4` FOREIGN KEY (`uniprot_UniprotAC`) REFERENCES `uniprot` (`UniprotAC`),
  CONSTRAINT `protein_ibfk_1` FOREIGN KEY (`comment`) REFERENCES `comments` (`idcomments`),
  CONSTRAINT `protein_ibfk_2` FOREIGN KEY (`internallyDefinedNames_id`) REFERENCES `internallydefinednames` (`id`),
  CONSTRAINT `protein_ibfk_3` FOREIGN KEY (`pubmedhits_id`) REFERENCES `pubmedhits` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

AG テーブル:

ag の説明:

+-------------+--------------------------------+------+-----+---------+-------+
| Field       | Type                           | Null | Key | Default | Extra |
+-------------+--------------------------------+------+-----+---------+-------+
| Article_AID | mediumint(5) unsigned zerofill | NO   | PRI | NULL    |       |
| Name        | varchar(200)                   | YES  |     | NULL    |       |
| Form        | varchar(150)                   | YES  |     | NULL    |       |
| Mw          | varchar(40)                    | YES  |     | NULL    |       |
| Source      | varchar(260)                   | YES  |     | NULL    |       |
| protein_PID | int(11)                        | YES  |     | NULL    |       |
+-------------+--------------------------------+------+-----+---------+-------+

テーブル ag の作成を表示:

`ag` (
  `Article_AID` mediumint(5) unsigned zerofill NOT NULL,
  `Name` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
  `Form` varchar(150) COLLATE utf8_unicode_ci DEFAULT NULL,
  `Mw` varchar(40) COLLATE utf8_unicode_ci DEFAULT NULL,
  `Source` varchar(260) COLLATE utf8_unicode_ci DEFAULT NULL,
  `protein_PID` int(11) DEFAULT NULL,
   PRIMARY KEY (`Article_AID`),
   KEY `fk_ag_Article1_idx` (`Article_AID`),
  CONSTRAINT `fk_ag_Article1` FOREIGN KEY (`Article_AID`) REFERENCES `article` (`AID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
4

2 に答える 2

0

PID と protein_PID の両方を非 NULL にします。これで問題が解決する可能性があります

于 2013-10-02T13:22:40.917 に答える