• ベストアンサー

PRIMARY KEYのコピー

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

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

#1です。 おっしゃっていることが理解しがたいのですが、 PRIMARY KEYにあるデータを単に取り込みたいのであれば#2さんの 書かれているとおりですが、おそらく新しいテーブルにPRIMARY KEY の属性をそのままつけたいという意味だと捉えたのですが・・・。 で、INSERT INTOでは当然PRIMARY KEY属性はつきません。 CREATE TABLEするさいに、必要フィールドにNOT NULLと PRIMARY 設定をしてテーブルをつくり、INSERT INTO ・・・SELECT ・・・ するわけです。 そもそもCREATE TABLE ・・・ SELECT ・・・では フィールドの属性もきれいにつきませんので、原則として CREATE TABLEの際に、きちんと各フィールドの属性を指定して つくってやるというのがまっとうなデータ移管の方式です。

w0a15455
質問者

補足

説明が悪かったです。申し訳ありません。 >PRIMARY KEYにあるデータを単に取り込みたいのであれば#2さんの >書かれているとおりですが、おそらく新しいテーブルにPRIMARY KEY >の属性をそのままつけたいという意味だと捉えたのですが・・・。 後者に書かれているように、属性をそのままつけたいと考えています。 インデックスのコピー(出来るか分かりませんが・・・)などで 対応は出来るのかなぁと今思っています。 もう少し調べてみます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

回答No.5

邪道かもしれませんが・・(笑 (この手順は、ちょっと責任がもてません。) コピー元テーブルをMYISAMに変更します。(MYISAMでしたらそのままで) MYSQL(サービス)を一度終了します。 データを保持しているファイルをコピーします。  data\データベース名\ の下に   コピー元テーブル名.frm と .MYD .MYI があると思います。   これをコピーして、新しいテーブル名の.frm .MYD .MYIにファイル名をします。 MYSQL(サービス)を起動します。 以上のような感じで出来ますが、これでは駄目でしょうか?

w0a15455
質問者

お礼

SQL文をソースに埋め込んで対応したいと思います。 みなさんありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • asuncion
  • ベストアンサー率33% (2126/6286)
回答No.4

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

全文を見る
すると、全ての回答が全文表示されます。
  • asuncion
  • ベストアンサー率33% (2126/6286)
回答No.2

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

w0a15455
質問者

補足

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

全文を見る
すると、全ての回答が全文表示されます。
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

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

w0a15455
質問者

補足

ありがとうございます。 Insert Intoで、PRIMARY KEYはコピーできるのですか? 勉強不足でよくわからないので、もう少し詳しく教えて 頂けませんか? よろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • PostgreSQLで、元テーブルをコピーする時に制約も取得するには?

    PostgreSQLの質問です。 元テーブルを新規テーブルに項目だけコピーしたいのですが、 primary key などの制約も同時にコピーする方法を教えて頂けないでしょうか? 下記で、空のテーブルをコピーできると思ったのですが、これでは制約はコピーされないようです。 CREATE TABLE tableName_temp AS SELECT * FROM tableName WHERE 1 = 0 また、後付で制約をつけるにも、CREATE TABLE時にしかつけることができないみたいです。 何かよい方法がありましたら、宜しくお願い致します。

  • 続oracleのプライマリ・キー名の変更について

    oracleのテーブル名を変更します。 運用上ネーミングルールとしてプライマリ・キー名はpk_テーブル名としていますので、 プライマリ・キー名もこの時に変更したいのですが、適切な手順を教えてください。 旧テーブル名:table_a 旧プライマリ・キー名:pk_table_a  ↓ ↓ ↓ 新テーブル名:table_b 新プライマリ・キー名:pk_table_b という質問をさせて頂きました。 回答を頂き、一旦納得した気がしたのですが、どうもうまくいきません。 下記を実行すると4のところでコケます。 既にオブジェクトが存在するというものです。 どうやら 2のところのプライマリキー名変更がうまくいっていないか pk_table_aがどこかにゴミとして残っているように思えます。 オブジェクトブラウザというツールで見てみると、 CONSTRAINTにpk_table_bが INDEXのところにpk_table_aが見えています。 手順がおかしいのか? コマンドが間違えているのか? それともプライマリキー名の変更はしない方が良いのか? ここら辺を教えてください。 --1.TABLE 作成 CREATE TABLE table_a ( ITM1 VARCHAR2(10) NOT NULL, ITM2 DATE, CONSTRAINT pk_table_a PRIMARY KEY (ITM1) USING INDEX ) / --2.プライマリキー名変更 ALTER TABLE table_a RENAME CONSTRAINT pk_table_a TO pk_table_b / --3.テーブル名変更 RENAME table_a TO table_b / --4.「1」と同じTABLE 作成 CREATE TABLE table_a ( ITM1 VARCHAR2(10) NOT NULL, ITM2 DATE, CONSTRAINT pk_table_a PRIMARY KEY (ITM1) USING INDEX ) /

  • TEXTでのPRIMARY KEYの使い方

    customer テーブルを作って、その中にname, email, passwordをそれぞれtext型が入ってます。その後にalter table customer add customer primary key(email);で、emailにprimary keyをつけようとしてるのですが、ERROR1170 Bolb/Text column 'email' used in key specification without a key lengthと言ってます。textの大きさを指定とかするべきなのでしょうか??本当はcreateの最初の段階で、primary keyを入れたかったのですが、その時も同じエラーが出たため、tableを作ってから追加しようと試みてます。他の型で試してみたら、primary keyは難なく追加できました。text型だと何かやり方が違うのでしょうか。ちなみに全てnot nullに設定してあります。回答お願いします。

    • ベストアンサー
    • MySQL
  • レコードのコピーについて

    PostgreSQLで質問があります。 table_Aの内容をtable_Bにコピーしたいと考えています。 create table table_B as select * from table_A; だと、table_Aのフィールドでserial型を使用しているため、 integerになってしまいます。 できれば上記以外でかつ、table_Bは既に作成されて いる状態でコピーを行いたいと考えています。 insert into table_b as select * from table_A; とかでできるんでしょうか? それとも他にいい案があるのでしょうか? 確認する環境がないのでわからないのですが、 どなたかご存知の方、お願い致します。

  • oracleのプライマリ・キー名の変更

    oracleのテーブル名を変更します。 運用上ネーミングルールとしてプライマリ・キー名はpk_テーブル名としていますので、 プライマリ・キー名もこの時に変更したいのですが、適切な手順を教えてください。 旧テーブル名:table_a 旧プライマリ・キー名:pk_table_a  ↓ ↓ ↓ 新テーブル名:table_b 新プライマリ・キー名:pk_table_b

  • create table as select

    create table 新TABLE as select * from コピー元TABLE; としたい場合に、"コピー元TABLE" に、LONGROW型項目があり、 失敗してしまいます。 何か、回避策はないでしょうか? 宜しくお願い致します。

  • データベース:主キーが文字列の場合IDを振るべき?

    テーブルの主キーが文字列の場合、 その主キーの文字列を通し番号に置き換えて、 その文字列は別テーブルに移したほうが検索が速いですか? 例えば、テーブルが CREATE TABLE spec ( test_name VARCHAR(40) NOT NULL, upper_limit NUMERIC(17,7), lower_limit NUMERIC(17,7), PRIMARY KEY(test_name) ); で、40文字という長いテスト項目名の場合、 CREATE TABLE spec ( test_id INTEGER NOT NULL, upper_limit NUMERIC(17,7), lower_limit NUMERIC(17,7), PRIMARY KEY(test_id) ); と CREATE TABLE test ( test_id INTEGER NOT NULL, test_name VARCHAR(40) NOT NULL, PRIMARY KEY(test_id) ); という二つのテーブルに分けたほうが検索は速くなりますか? (もちろん、結合する時間も含めてです。) もし速くなるとしても、文字数が3文字など少ない場合は 通し番号に置き換えてもきっと効果は薄いですよね? 何文字以上の文字列なら通し番号に置き換えたほうが速いですか? 皆さんはどのように決めていますか?

  • 'PRIMARY KEY'と'UNIQUE()'の違いを教えて!

    CREATE TABLE等で出てくる'PRIMARY KEY'と'UNIQUE()'の違いが分かりません。 どちらも他の行と同じ値を登録させないためのものと認識しています。 どのように使い分けるのでしょうか。 あとINDEX()について教えてください。 これは挿入や更新のたびに、INDEXにした列の値の順に整列され、探索が高速になるものと認識しています。 これは'PRIMARY KEY'や'UNIQUE()'の列に対してもやらないといけないのですか。 テーブルは'PRIMARY KEY'や'UNIQUE()'に設定した列の値を基に随時整列されていると思っていたのですが・・・。 あと複数の列へINDEX()を設定することはできるのでしょうか。 その場合、どの列の値が優先的に整列されるのでしょうか。 複数列へINDEX()を設定するCREATE TABLEの書き方を、よろしければ教えてください。

    • ベストアンサー
    • MySQL
  • Primary Key について

    PostgreSQLのPrimary Keyについて質問があります。 ---------------------------------- create table test_db ( id int8, name varchar(32), day date, constraint PK primary key( id, name)); ---------------------------------- 上記のようにtest_dbを作成しました。 データをinsertする際、 id:[1] name:[watanabe] day:[2003-05-29] id:[2] name:[watanabe] day:[2003-05-29] とするとデータが格納されてしまいます。 idとnameの両方が一致したデータは格納できないと 思うのですが、 id, name各々test_db内に対して一意なデータとして 扱いたいのですがどのようにすればいいでしょうか? [例] id:[1] name:[watanabe] day:[2003-05-29](格納済) (name:watanabeは存在するためエラー) id:[2] name:[watanabe] day:[2003-05-29] (id:1は存在するためエラー) id:[1] name:[simada] day:[2003-05-29] (正常格納) id:[2] name:[simada] day:[2003-05-29] --------------------------------------- わかりづらくて申し訳ありませんが、 宜しくお願いいたします。

  • SQLのPRIMARY KEYの後のKEYについて

    SQLの超初心者です。 SQLのPRIMARY KEYの後のKEYについてご教授ください。m(__)m CREATE TABLE ***** (   shipping_id NOT NULL default 0,   order_date datetime NOT NULL default 0000-00-00 00:00:00,     ・     ・   PRIMARY KEY (shipping_id),   KEY order_date (order_date) ) の様に参考書に記載があるのですが、 KEY order_date (order_date) の部分の意味がわかりません。 どなたか詳しい方アドバイスお願いします。

このQ&Aのポイント
  • So-net光プラスマンション東日本でインターネットに接続できない問題について、光回線工事済みでONUと無線LAN端末を接続したが繋がらず、スマホの故障や操作ミスではないことを確認。RESETスイッチで初期化も試したが改善せず、無線LAN端末の故障の可能性が考えられる。
  • インターネットに接続できない問題について、So-net光プラスマンション東日本の利用コースで2021年7月17日に光回線工事が済み、ONUと無線LAN端末を接続したが繋がらない。スマホは2.4GHzと5GHzのwifiネットワークに接続できるが、インターネットには繋がらないため、無線LAN端末の故障の可能性を考えている。
  • So-net光プラスマンション東日本でインターネットに接続できない問題について、工事済みの光回線にONUと無線LAN端末を接続したが繋がらず、スマホの故障や操作ミスではないことを確認。RESETスイッチを使って初期化を試したが改善せず、無線LAN端末の故障の可能性を疑っている。
回答を見る