みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

PRIMARY KEYのコピー

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

投稿日時 - 2007-05-09 15:00:27

QNo.2986013

すぐに回答ほしいです

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

#1です。

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

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

投稿日時 - 2007-05-09 18:08:36

補足

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

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

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

投稿日時 - 2007-05-09 18:26:27

ANo.3

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.5

邪道かもしれませんが・・(笑
(この手順は、ちょっと責任がもてません。)

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

以上のような感じで出来ますが、これでは駄目でしょうか?

投稿日時 - 2007-05-10 12:49:12

お礼

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

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

投稿日時 - 2007-05-11 14:04:44

ANo.4

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

投稿日時 - 2007-05-09 19:56:05

ANo.2

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

投稿日時 - 2007-05-09 17:42:44

補足

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

投稿日時 - 2007-05-09 18:25:03

ANo.1

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

投稿日時 - 2007-05-09 15:09:39

補足

ありがとうございます。

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

よろしくお願いします。

投稿日時 - 2007-05-09 17:20:34