是否有一个SQLite等同于从MYSQL显示创建表?

时间:2019-05-07 13:16:02

标签: sqlite create-table

我正在使用sqlite3并尝试获取自创建以来已修改的表的create table语句。但是,sqlite_master中的sql列具有用于生成表的相同create语句。我正在寻找更像MySQL中SHOW CREATE TABLE的结果,其中提供了当前表结构的create语句。这可能吗?我使用此create语句来帮助检查两个表的结构是否相同。如果它们不相同,那么我将进行更深入的检查,以了解它们之间到底有什么不同。

如前所述,我尝试使用sqlite_master的sql列。我还检查了PRAGMA命令,以查看我要找的东西是否存在。

我目前正在跑步

SELECT * FROM sqlite_master

这只会获取表的原始create语句,而不是复制表所需的create语句。

谢谢您的帮助!

2 个答案:

答案 0 :(得分:1)

您是正确的,sqlite_master仅包含(规范化的)原始语句。

SQLite无法选择根据现有表为您生成CREATE TABLE语句。

.dump方法是SQLite Shell的一项功能。如果您需要生成CREATE TABLE条语句,则需要自己实现。

您可以从SQLite引用shell.c中的dump_schema回调,以查看sqlite shell如何生成.dump输出。

答案 1 :(得分:0)

sqlite3 显示了这一点以及重新创建所有数据的语句。使用 .dump

示例输出:

sqlite> .dump links
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE IF NOT EXISTS "links" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "url" varchar, "description" text, "created_at" datetime(6) NOT NULL, "updated_at" datetime(6) NOT NULL);
INSERT INTO links VALUES(1,'http://graphql.org/','The Best Query Language','2021-05-13 13:48:15.649708','2021-05-13 13:48:15.649708');
INSERT INTO links VALUES(2,'http://dev.apollodata.com/','Awesome GraphQL Client','2021-05-13 13:48:19.405152','2021-05-13 13:48:19.405152');
COMMIT;

您对第三行感兴趣,CREATE TABLE IF NOT EXISTS ...