web-dev-qa-db-ja.com

テーブル構造をsqlite3の新しいテーブルにコピーする

既存のテーブル構造を新しいものに簡単にコピーする方法はありますか? (データは必要ありません。構造-> id INTEGER、名前varchar(20)など)

THX

40
leon22

次のようなコマンドを使用できます。

CREATE TABLE copied AS SELECT * FROM mytable WHERE 0

しかし、SQLiteの動的型付けにより、ほとんどの型情報は失われます。

元のテーブルと同じように動作する、つまり列の数と名前が同じで、同じ値を格納できるテーブルだけが必要な場合、これで十分です。

元の型とまったく同じ型情報が本当に必要な場合は、次のようにCREATE TABLEテーブルから元のSQL sqlite_masterステートメントを読み取ることができます。

SELECT sql FROM sqlite_master WHERE type='table' AND name='mytable'
78
CL.

SQLiteは、PK、デフォルト、およびインデックスを持つテーブルを複製できません。

別のツールによるハッキングが必要です。

シェルで、テーブル名をsedに置き換えます。

sqlite3 dbfile '.schema oldtable' | sed '1s/oldtable/newtable/' | sqlite3 dbfile

また、新しいテーブルを確認できます。

sqlite3 dbfile '.schema newtable'

主キー、デフォルトおよびインデックスは予約されます。

このコマンドがお役に立てば幸いです。

11
Raymond Wu

sqlite> .schema

CREATE TABLE [About](
  [id],
  [name],
  [value]);

.schemaコマンドは、コマンドを入力してSQLiteインタープリターを手動でプログラミングすることにより、About-tableの構造を提供します。

CREATEブロックを貼り付けて実行し、テーブルに新しい名前を付けます。

sqlite> CREATE TABLE [AboutToo](
  [id],
  [name],
  [value]);

.tablesコマンドにより、「コピー済み」の2つのテーブル(古いものと新しいもの)が表示されます。

sqlite> .tables
About     AboutToo

追伸sqlite>は、SQLite.exeインタープリターを起動した後にコンソールに表示されるコマンドプロンプトです。取得するには、www.sqlite.orgにアクセスしてください

0
startup.maker