QA@IT

【Mysql】外部制約を設定した子テーブルの主キーを削除したい。

5648 PV

掲示板を作っています。
間違えて子テーブルに主キーを設定してしまい、親テーブルの人が投稿をすると
子テーブルの方の主キーが一意ではなくなりエラーがでてしまいます。
だから子テーブルの主キーを削除する
ALTER TABLE comment drop primary key;
と入力すると
errno: 150 - Foreign key constraint is incorrectly formedと拒否されます。
どのような記述をすれば子テーブルの主キーを削除できますでしょうか?
説明下手で申し訳ありません・・・

親テーブル
名前:login
カラム:| id_id | id | pw |
id_idにオートインクリメントと主キーを設定しています。

子テーブル
名前;comment
カラム:| id_id | time | tweet |
id_idに外部キーと主キーを設定しています。

親テーブル構造
| login | CREATE TABLE `login` (
  `id` varchar(10) NOT NULL,
  `pw` varchar(10) NOT NULL,
  `id_id` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id_id`)
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8 |


子テーブル構造
| comment | CREATE TABLE `comment` (
  `id_id` int(11) NOT NULL,
  `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAM
P,
  `tweet` varchar(250) NOT NULL,
  PRIMARY KEY (`id_id`),
  CONSTRAINT `login_id_id_fk` FOREIGN KEY (`id_id`) REFERENCES `login` (`id_id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 |

回答

外部キーにはインデックスが必要です。
プライマリキーを削除すると id_id カラムにインデックスが無くなってしまうのでエラーになります。
なので id_id カラムにインデックスを設定してからプライマリキーを削除すればいいです。

ALTER TABLE comment ADD INDEX (id_id), DROP PRIMARY KEY;
編集 履歴 (0)
  • ありがとうございます!
    Primary key はこのIndexとUniqueで構成されているんですね。。。
    勉強になりました:D
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。