将表结构复制到sqlite3中的新表

leo*_*n22 40 sql database sqlite copy

有没有一种简单的方法可以将现有的表结构复制到新的表结构?(不需要数据,只需要结构 - >像id INTEGER,name varchar(20)......)

谢谢

CL.*_*CL. 80

你可以使用这样的命令:

CREATE TABLE copied AS SELECT * FROM mytable WHERE 0
Run Code Online (Sandbox Code Playgroud)

但是由于SQLite的动态类型,大多数类型信息都会丢失.

如果您只需要一个行为与原始行为相似的表,即具有相同的列数和名称,并且可以存储相同的值,这就足够了.

如果您确实需要与原始类型信息完全相同的类型信息,则可以CREATE TABLEsqlite_master表中读取原始SQL 语句,如下所示:

SELECT sql FROM sqlite_master WHERE type='table' AND name='mytable'
Run Code Online (Sandbox Code Playgroud)

  • 我认为indiekiduk正在询问是否有一种方法可以在SQL中以编程方式执行此操作,我认为这是一个很好的问题.如果有办法做到这一点,那将是对答案的改进. (6认同)
  • 但是,如何使用select语句的输出来创建新表? (3认同)
  • 提示 - 如果您已向表添加索引(并且希望将其添加到新表中),则可以使用以下方法从 sqlite_master 检索其 SQL: SELECT sql FROM sqlite_master WHERE type='index' AND tbl_name='mytable' 并且 sql 不是无效的; - 请注意,我使用名为 tbl_name 的字段,因为名称字段将存储索引的名称,而不是表的名称 (2认同)

Ray*_* Wu 11

SQLite无法使用PK,默认值和索引来克隆表.

用其他工具进行黑客攻击是必要的.

在shell中,用sed替换表名.

sqlite3 dbfile '.schema oldtable' | sed '1s/oldtable/newtable/' | sqlite3 dbfile
Run Code Online (Sandbox Code Playgroud)

你可以查看新表.

sqlite3 dbfile '.schema newtable'
Run Code Online (Sandbox Code Playgroud)

主键,默认值和索引将被保留.

我希望这个命令可以帮到你.