- ベストアンサー
alter文について
mysqlのバージョンはversion: 4.0.22です。 alter文を使って、 オートインクリメントでプライマリーキーを3つ付けたいのですが どのように記述したらいいのでしょうか・・・。 すみませんが教えてください。 Aテーブルのカラムがno,p1,p2,temp1,temp2,temp3です。 現在は、p1だけがプライマリーになっている状態です。 noをオートインクリメントとプライマリー p1,p2をプライマリーにしたいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
あ、alterで指定したい・・ということだったですね(汗 でもオートインクリメントがキーに入っているので、「alter table A drop primary key」でいったん削除しようとしてもエラーになってしまいますね。いったんエクスポート→create tableを書き替えてインポートが確実かもしれません。
その他の回答 (2)
- shimix
- ベストアンサー率54% (865/1590)
普通に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)
私も初心者なので役に立たないかもしれませんが。 プライマリーキーはテーブル毎に1つなのではありませんか。 プライマリーキーを3つ付ける目的はわかりませんが、 検索を速めるには、インデックスだと思われます。 ------------------------------ たか
補足
どの支店のどのタイプの何番というふうなテーブルですので プライマリーキーは3つ必要なのです。
補足
shimixさん 回答ありがとうございます。 エクスポート⇒create table というわけにはいかないんです・・。 データベースやレコードがいくつもありますので、それを 一つづつやっていくのが大変でして・・・。 alter table change・・・などで出来ませんでしょうか・・・