前人未踏の領域へ アプリ開発編

Android, iOSアプリ開発に関する調査メモ置き場。ほとんどAndroid。はてなダイアリーから移行したため古い記事にはアプリ以外も含まれます。

外部キー制約追加時の注意点

テーブル作成時に外部キーを追加しようとしたらエラーになったのでその対応メモ

現象

とあるテーブルに以下のような外部キーを追加するコマンドを実行

ALTER TABLE `some_table`
ADD CONSTRAINT `fkey_item_id`
  FOREIGN KEY (`item_id`)
  REFERENCES `item` (`item_id`),
ADD CONSTRAINT `fkey_user_id`
  FOREIGN KEY (`user_id`)
  REFERENCES `user` (`user_id`)

なぜかテーブルを作成できないぜというエラーになる

Error Code: 1005. Can't create table 'table_name.#sql-24e_6' (errno: 121)

原因

外部キー名をfkey_item_idとしたが、item_idという名前がテーブルのカラムとして使用されているのにindex化されていない
のが問題らしい。

対策

外部キー名を変更したらエラーは発生しなくなった。

ALTER TABLE `some_table`
ADD CONSTRAINT `fkey_item`
  FOREIGN KEY (`item_id`)
  REFERENCES `item` (`item_id`),
ADD CONSTRAINT `fkey_user`
  FOREIGN KEY (`user_id`)
  REFERENCES `user` (`user_id`)