MySQLバージョン5.5.24には次の表があります
DROP TABLE IF EXISTS `momento_distribution`;
CREATE TABLE IF NOT EXISTS `momento_distribution`
(
`momento_id` INT(11) NOT NULL,
`momento_idmember` INT(11) NOT NULL,
`created_at` DATETIME DEFAULT NULL,
`updated_at` DATETIME DEFAULT NULL,
`unread` TINYINT(1) DEFAULT '1',
`accepted` VARCHAR(10) NOT NULL DEFAULT 'pending',
`ext_member` VARCHAR(255) DEFAULT NULL,
PRIMARY KEY (`momento_id`, `momento_idmember`),
KEY `momento_distribution_FI_2` (`momento_idmember`),
KEY `accepted` (`accepted`, `ext_member`)
)
ENGINE=InnoDB
DEFAULT CHARSET=latin1;
とを使用して他の2つのテーブルと多対1の関係を持つ大量のデータがありondelete=restrict
ますonupdate=restrict
。
次に、既存の関係とデータを維持したまま、構造を変更し、テーブルに個別の主キーを導入する必要があります。そのために、次のクエリを実行しました。
ALTER TABLE `momento_distribution` ADD `id` INT( 11 ) NOT NULL FIRST;
ALTER TABLE `momento_distribution` DROP PRIMARY KEY , ADD PRIMARY KEY ( `id` );
残念ながら、2番目のクエリは次のエラーで失敗しました。
1062-キー「PRIMARY」のエントリ「0」が重複しています
誰かが問題を指摘できますか?問題は既存のリレーションにあると思いますが、数千行ある既存のリレーションやデータを失いたくありません。データを失うことなくこれを行う方法はありますか?
編集: データを表示すると、新しく作成された列に値「0」が含まれていることがわかりました。おそらくこれは、(新しい主キーの)レコードが重複しているために主キーを変更することを許可していません
8,000行を超えているため、手動で変更することはできません。rowid
新しい主キーに割り当てる方法はありますか?