• ベストアンサー

alter文について

mysqlのバージョンはversion: 4.0.22です。 alter文を使って、 オートインクリメントでプライマリーキーを3つ付けたいのですが どのように記述したらいいのでしょうか・・・。 すみませんが教えてください。 Aテーブルのカラムがno,p1,p2,temp1,temp2,temp3です。 現在は、p1だけがプライマリーになっている状態です。 noをオートインクリメントとプライマリー p1,p2をプライマリーにしたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.3

あ、alterで指定したい・・ということだったですね(汗 でもオートインクリメントがキーに入っているので、「alter table A drop primary key」でいったん削除しようとしてもエラーになってしまいますね。いったんエクスポート→create tableを書き替えてインポートが確実かもしれません。

kadai1800
質問者

補足

shimixさん 回答ありがとうございます。 エクスポート⇒create table というわけにはいかないんです・・。 データベースやレコードがいくつもありますので、それを 一つづつやっていくのが大変でして・・・。 alter table change・・・などで出来ませんでしょうか・・・

その他の回答 (2)

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.2

普通に3つまとめて書けばいいです。一応phpMyAdminでテーブルを作ってからエクスポートのSQLの記述を確認しました。こんな感じになってます。   CREATE TABLE `A` (    `no` int(11) NOT NULL auto_increment,    `p1` int(11) NOT NULL default '0',    `p2` int(11) NOT NULL default '0',    `temp1` varchar(5) NOT NULL default '',    `temp2` varchar(5) NOT NULL default '',    `temp3` varchar(5) NOT NULL default '',    PRIMARY KEY (`no`,`p1`,`p2`)   ) TYPE=MyISAM AUTO_INCREMENT=1 ; ただ、auto_incrementの項目があるのに他の項目をプライマリに入れる意味がどれだけあるのかはわかりません。別途インデックスを付けるのならわかりますが・・

  • auty
  • ベストアンサー率58% (284/486)
回答No.1

私も初心者なので役に立たないかもしれませんが。 プライマリーキーはテーブル毎に1つなのではありませんか。 プライマリーキーを3つ付ける目的はわかりませんが、 検索を速めるには、インデックスだと思われます。 ------------------------------ たか

kadai1800
質問者

補足

どの支店のどのタイプの何番というふうなテーブルですので プライマリーキーは3つ必要なのです。

関連するQ&A