質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Q&A

解決済

1回答

6955閲覧

as selectを使ったcreate table時にprimary key を埋め込む方法が知りたい

zrk

総合スコア7

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

0グッド

0クリップ

投稿2017/02/04 18:43

###前提・実現したいこと
create table T2 as select * from T1 where ~
select文で作成したT2にprimary key を新設したいのですができません。
(auto incrementはあってもなくてもよい)
よろしくお願いします。

###該当のソースコード

alter table T2 add idd integer; ...通る alter table T2 add primary key(idd); ...通らない

この文法はsqlite3では使えないようで、どう書けばいいのかわかりません。

###エラー
Sqlite3.OperationalError: near "primary": syntax error

###試したこと
この場合、createと同時にprimary keyを設定できない気配で、
カラム(idd)を作ってから、主キーに設定しようと考えましたが、書き方がよくわかりません。

alter table T2 add primary key(idd); ...通らない

###補足情報(言語/FW/ツール等のバージョンなど)
Sqlite3

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

参考サイト
に書かれているように、

  1. 外部キーチェックoff(foreign_keys=off)
  2. 現在のテーブル名をold_xxx等に変更(ALTER TABLE table_name RENAME TO old_table)
  3. プライマリーキー変更後のテーブルを作成(CREATE TABLE table_name)
  4. old_xxxxからデータをコピー
  5. 外部キーチェックon(PRAGMA foreign_keys=on)
  6. old_table削除(DROP TABLE old_xxxx)

というめんどくさい手順を踏まなければならないようです。

投稿2017/02/05 02:07

turbgraphics200

総合スコア4267

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

zrk

2017/02/05 10:41

なかなかインサートがうまくいきませんでしたが(サイズやら、typeやらの問題で) 既存のテーブルに主キーにするカラムをaddしてからold_tableににして、 create時に使用したカラム順にselectして流し込んだら入りました。 (add のミスなんかでおかしなカラムができててサイズがずれたりしてました><) カラムが多いとつらいですね(汗 主キーも機能してました! 丁寧にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問