わかりましたので、インデックスと外部キーを使用して MySQL にテーブルを作成しています。私は MySQL Workbench を使用してテーブルを作成し、それから SQL 作成スクリプトをフォワード エンジニアリングします (SQL コードをすぐに手動で書き出すよりも、視覚的な DB 環境の方が優れています)。
問題は、SQL スクリプトを mysql にインポートするときに何度も発生することです。古典的なエラーが発生します。
#1005 - Can't create table 'db.tablename' (errno: 121)
通常はインデックス/外部キーに関連する問題を毎回解決することができましたが、今では毎回修正する必要があることにイライラし始めています。何が問題なのかよくわかりません (特に、MySQL 製品が独自のデータベース用に SQL コードを作成している場合)。以下は、通常、問題の原因となるコードです。
CREATE TABLE IF NOT EXISTS `db`.`groupMembers` (
`groupMembersID` INT NOT NULL AUTO_INCREMENT ,
`groupID` INT NOT NULL ,
`userID` INT NULL ,
PRIMARY KEY (`groupMembersID`) ,
INDEX `group` (`groupID` ASC) ,
INDEX `user` (`userID` ASC) ,
CONSTRAINT `group`
FOREIGN KEY (`groupID` )
REFERENCES `db`.`groups` (`groupsID` )
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT `user`
FOREIGN KEY (`userID` )
REFERENCES `db`.`users` (`usersID` )
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB;
エラーは通常、最初の INDEX 定義から発生します。インデックス定義を取り出しても、最初の外部キー制約定義でエラーが発生します。確認したところ、外部キーのリモート列とローカル列は同じデータ型とサイズです。