[mysqlのInnoDBについての質問です。]


普段MyIsamで下記のようなテーブルを作っていたのですが、これをInnoDBで実装するにはどのように定義すればよいのでしょうか?

CARETE TABLE profile_template(
user_id INT UNSIGNED NOT NULL,
template_id INT UNSIGNED AUTO_INCREMENT,
PRIMARY KEY(user_id, template_id)
);
(user_idごとにteplate_idが自動で初期値から振られるというテーブルです。)


単純にENGINE=InnoDBをつけて作成した場合、
Incorrect table definition; there can be only one auto column and it must be defined as a key
という風にエラーが出てしまい、作成することが出来ません。


可能な限りテーブルの定義だけで解決したいのですが、どのように設定すればよいのでしょうか?

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2007/05/15 12:48:20
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:tekitouse No.1

回答回数29ベストアンサー獲得回数3

ポイント100pt

PRIMARY KEY(user_id, template_id)

の部分を

CONSTRAINT KEY_NAME PRIMARY KEY(user_id, template_id)

にしてみては如何ですか?

id:tommyt

有難うございます。とりあえず同じような動作をすることが確認できました。

CONSTRAINTを使うんだろうなぁ、、、とは思っていたのですが実際の

指定が良く分からなかったのでとても参考になりました。

2007/05/15 12:39:28

その他の回答2件)

id:tekitouse No.1

回答回数29ベストアンサー獲得回数3ここでベストアンサー

ポイント100pt

PRIMARY KEY(user_id, template_id)

の部分を

CONSTRAINT KEY_NAME PRIMARY KEY(user_id, template_id)

にしてみては如何ですか?

id:tommyt

有難うございます。とりあえず同じような動作をすることが確認できました。

CONSTRAINTを使うんだろうなぁ、、、とは思っていたのですが実際の

指定が良く分からなかったのでとても参考になりました。

2007/05/15 12:39:28
id:nohohon_x No.2

回答回数72ベストアンサー獲得回数1

ポイント10pt

CARETE TABLE profile_template(

user_id INT UNSIGNED NOT NULL,

template_id INT UNSIGNED AUTO_INCREMENT,

PRIMARY KEY(user_id, template_id)

) TYPE=InnoDB;

これでInnoDBに出来ると思います。

id:tommyt

MySQLのバージョンかいて無かったですね(^^;

申し訳ないです。

私が使っているのはmysql5でTYPEの指定は以前のバージョンですね。

2007/05/15 12:40:18
id:chuken_kenkou No.3

回答回数722ベストアンサー獲得回数54

ポイント10pt

複合インデクス(インデクスの構成列が複数ある定義)で、二つ目の列にauto_incrementを指定できるのは、ストレージエンジンがMyISAMかBDBの場合だけです。

MySQL AB :: MySQL 4.1 リファレンスマニュアル ::...

id:tommyt

ごめんなさい。それは知っておりまして。

結局の所どういったような設定をすればよいのかが聞きたかったんです。

tekitouseさんの回答で解決できましたのでとりあえず締めにさせて頂きます。

2007/05/15 12:40:57
  • id:tommyt
    あれ、、、、できたって勘違いだったっぽ・・・orz
  • id:tommyt
    とりあえずテーブル定義で解決する為にはちょっと時間
    がかかりそうなので代替案としてトリガを使うことにしました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません