• ベストアンサー

PRIMARY KEYのコピー

asuncionの回答

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.4

#2です。 「正しくcreateする」とは、 ・not null属性を付ける ・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) の部分の意味がわかりません。 どなたか詳しい方アドバイスお願いします。