- ベストアンサー
PRIMARY KEYのコピー
テーブルのコピーを create table test1 as select * from test ; のように行っていますが、PRIMARY KEYも一緒にコピーしたいのですが、 どうすれば良いのでしょうか?
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
#1です。 おっしゃっていることが理解しがたいのですが、 PRIMARY KEYにあるデータを単に取り込みたいのであれば#2さんの 書かれているとおりですが、おそらく新しいテーブルにPRIMARY KEY の属性をそのままつけたいという意味だと捉えたのですが・・・。 で、INSERT INTOでは当然PRIMARY KEY属性はつきません。 CREATE TABLEするさいに、必要フィールドにNOT NULLと PRIMARY 設定をしてテーブルをつくり、INSERT INTO ・・・SELECT ・・・ するわけです。 そもそもCREATE TABLE ・・・ SELECT ・・・では フィールドの属性もきれいにつきませんので、原則として CREATE TABLEの際に、きちんと各フィールドの属性を指定して つくってやるというのがまっとうなデータ移管の方式です。
その他の回答 (4)
- naochancom
- ベストアンサー率61% (41/67)
邪道かもしれませんが・・(笑 (この手順は、ちょっと責任がもてません。) コピー元テーブルをMYISAMに変更します。(MYISAMでしたらそのままで) MYSQL(サービス)を一度終了します。 データを保持しているファイルをコピーします。 data\データベース名\ の下に コピー元テーブル名.frm と .MYD .MYI があると思います。 これをコピーして、新しいテーブル名の.frm .MYD .MYIにファイル名をします。 MYSQL(サービス)を起動します。 以上のような感じで出来ますが、これでは駄目でしょうか?
お礼
SQL文をソースに埋め込んで対応したいと思います。 みなさんありがとうございました。
- asuncion
- ベストアンサー率33% (2127/6289)
#2です。 「正しくcreateする」とは、 ・not null属性を付ける ・primary keyであることを指定する ・その他、コピー元のテーブルが持っている属性を指定する ということです。
- asuncion
- ベストアンサー率33% (2127/6289)
test1テーブルを正しくcreateした後、 insert into test1 select * from test; を実行すれば、primary keyかどうかに関係なく、 すべてのカラムをコピーします。
補足
No.3を見てください。 よろしくお願いします。
- yambejp
- ベストアンサー率51% (3827/7415)
create tableしてからINSERT INTO をすればよいでしょう。
補足
ありがとうございます。 Insert Intoで、PRIMARY KEYはコピーできるのですか? 勉強不足でよくわからないので、もう少し詳しく教えて 頂けませんか? よろしくお願いします。
補足
説明が悪かったです。申し訳ありません。 >PRIMARY KEYにあるデータを単に取り込みたいのであれば#2さんの >書かれているとおりですが、おそらく新しいテーブルにPRIMARY KEY >の属性をそのままつけたいという意味だと捉えたのですが・・・。 後者に書かれているように、属性をそのままつけたいと考えています。 インデックスのコピー(出来るか分かりませんが・・・)などで 対応は出来るのかなぁと今思っています。 もう少し調べてみます。