2

MySQL5.1.54を実行しています-lubuntu4

私はテーブルを持っています

CREATE TABLE `mcli` (
  `id` bigint(20) NOT NULL,
  `pr_id` bigint(20) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `FK7617032AB07F537D` (`id`),
  KEY `FK7617032A4007E4D7` (`pr_id`),
  CONSTRAINT `FK7617032AB07F537D` FOREIGN KEY (`id`) REFERENCES `acli` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 

そして、このテーブルにはデータが含まれています。

別のテーブルがあります

CREATE TABLE `PR` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `frequency` varchar(255) DEFAULT NULL,
  `notes` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `FKPRtoAR` (`id`),
  CONSTRAINT `FKPRtoAR` FOREIGN KEY (`id`) REFERENCES `AR` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8 

このテーブルにもデータが含まれています。

mcli.pr_id(テーブルmcli、フィールドID)のすべての行のデータは、pr.idの有効なエントリです(これは、OLDPRテーブルをPRに移行する前に別のテーブルOLDPPRにあったためです。実際にはmcli.pr_id OLDPR.id(古いテーブルのidフィールド)への外部キーを持っていました。

mcli.pr_idをPR.idに関連付ける外部キー制約を追加したいと思います。スキーマからわかるように、私はすでにmcli.pr_idにFK7617032A4007E4D7というインデックスを作成しています。そこで、コマンドを実行して外部キー制約を生成しようとしました。

mysql> ALTER TABLE `mcli` ADD CONSTRAINT `FK7617032A4007E4D7` FOREIGN KEY (`pr_id`) REFERENCES `PR` (`id`);
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ADD CONSTRAINT `FK7617032A4007E4D7` FOREIGN KEY (`pr_id`) REFERENCES ' at line 1
mysql> 

また、mcliからすべてのデータをフラッシュし、コマンドを再実行して外部キー制約を追加しようとしましたが、それでも同じエラーが発生しました。一重引用符を試しましたが、引用符はありません。Web上のすべては、私が正しい構文を持っていることを示唆しています。私は何が間違っているのですか?

私は私が得ることができるどんな助けにも感謝します。

4

1 に答える 1

1

これはただの推測であり、テストする環境がありません。

パーサーは、同じ名前のキーが既に存在するという事実によって混乱する可能性があります。厳密に言えば、構文に問題がない場合でも、これにより構文エラーが発生することが知られています。

動作を確認するためだけに、別の制約名を使用してみてください。

次に、このキーをドロップしてみてください。

KEY `FK7617032A4007E4D7` (`pr_id`),

制約を追加する前に:

ALTER TABLE `mcli` ADD CONSTRAINT `FK7617032A4007E4D7` FOREIGN KEY (`pr_id`) REFERENCES `PR` (`id`);

最近の 5.1 バージョンではこれを再現できませんでした。

于 2012-10-05T15:47:04.967 に答える