の外部キーを怒らせずに anindex(col1, col2, col3)
を anに変更したい。どうすればいいのですか?index(col1)
col1
私のアプローチは、インデックスを削除して作成することでした。ただし、実行中に外部キーに失敗します。スキーマをアップグレードして元に戻す手順は何ですか?
オリジナル:
`sid` int(11) NOT NULL DEFAULT '0',
`cid` int(11) NOT NULL DEFAULT '0',
`uid` int(11) NOT NULL DEFAULT '0',
...
UNIQUE KEY `User_sid` (`sid`,`cid`,`uid`),
...
CONSTRAINT `User_ibfk_1` FOREIGN KEY (`sid`) REFERENCES `SolrMap` (`sid`)
目的:
...,
`sid` int(11) NOT NULL DEFAULT '0',
`cid` int(11) NOT NULL DEFAULT '0', ####ONE LESS COLUMN
`password_reset_valid_until` datetime DEFAULT NULL,
`password_reset_id` char(24) DEFAULT NULL,
...
KEY `User_sid` (`sid`) ####NEW KEY
####WANT NEW FOREIGN KEY
そして、これは私が試して失敗したものです:
ALTER TABLE `User`
DROP INDEX `User_sid`,
ADD INDEX `User_sid` (`sid`) USING BTREE,
DROP COLUMN `uid`;
そして、これが失敗する理由です:
------------------------
LATEST FOREIGN KEY ERROR
------------------------
121013 8:27:39 Error in foreign key constraint of table friday/User:
there is no index in the table which would contain
the columns as the first columns, or the data types in the
table do not match the ones in the referenced table
or one of the ON ... SET NULL columns is declared NOT NULL. Constraint:
,
CONSTRAINT "User_ibfk_1" FOREIGN KEY ("sid") REFERENCES "SolrMap" ("sid")
InnoDB: Renaming table `friday`.<result 2 when explaining filename '#sql-6fd_2f12e'> to `friday`.`User` failed!