dポイントプレゼントキャンペーン実施中!

テーブルのコピーを
create table test1 as
select * from test
;
のように行っていますが、PRIMARY KEYも一緒にコピーしたいのですが、
どうすれば良いのでしょうか?

A 回答 (5件)

#1です。



おっしゃっていることが理解しがたいのですが、
PRIMARY KEYにあるデータを単に取り込みたいのであれば#2さんの
書かれているとおりですが、おそらく新しいテーブルにPRIMARY KEY
の属性をそのままつけたいという意味だと捉えたのですが・・・。

で、INSERT INTOでは当然PRIMARY KEY属性はつきません。
CREATE TABLEするさいに、必要フィールドにNOT NULLと
PRIMARY 設定をしてテーブルをつくり、INSERT INTO ・・・SELECT ・・・
するわけです。
そもそもCREATE TABLE ・・・ SELECT ・・・では
フィールドの属性もきれいにつきませんので、原則として
CREATE TABLEの際に、きちんと各フィールドの属性を指定して
つくってやるというのがまっとうなデータ移管の方式です。

この回答への補足

説明が悪かったです。申し訳ありません。

>PRIMARY KEYにあるデータを単に取り込みたいのであれば#2さんの
>書かれているとおりですが、おそらく新しいテーブルにPRIMARY KEY
>の属性をそのままつけたいという意味だと捉えたのですが・・・。
後者に書かれているように、属性をそのままつけたいと考えています。

インデックスのコピー(出来るか分かりませんが・・・)などで
対応は出来るのかなぁと今思っています。
もう少し調べてみます。

補足日時:2007/05/09 18:26
    • good
    • 0

邪道かもしれませんが・・(笑


(この手順は、ちょっと責任がもてません。)

コピー元テーブルをMYISAMに変更します。(MYISAMでしたらそのままで)
MYSQL(サービス)を一度終了します。
データを保持しているファイルをコピーします。
 data\データベース名\ の下に
  コピー元テーブル名.frm と .MYD .MYI があると思います。
  これをコピーして、新しいテーブル名の.frm .MYD .MYIにファイル名をします。
MYSQL(サービス)を起動します。

以上のような感じで出来ますが、これでは駄目でしょうか?
    • good
    • 0
この回答へのお礼

SQL文をソースに埋め込んで対応したいと思います。

みなさんありがとうございました。

お礼日時:2007/05/11 14:04

#2です。


「正しくcreateする」とは、
・not null属性を付ける
・primary keyであることを指定する
・その他、コピー元のテーブルが持っている属性を指定する
ということです。
    • good
    • 0

test1テーブルを正しくcreateした後、


insert into test1 select * from test;
を実行すれば、primary keyかどうかに関係なく、
すべてのカラムをコピーします。

この回答への補足

No.3を見てください。
よろしくお願いします。

補足日時:2007/05/09 18:25
    • good
    • 0

create tableしてからINSERT INTO をすればよいでしょう。

この回答への補足

ありがとうございます。

Insert Intoで、PRIMARY KEYはコピーできるのですか?
勉強不足でよくわからないので、もう少し詳しく教えて
頂けませんか?

よろしくお願いします。

補足日時:2007/05/09 17:20
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す