我正在使用sqlite3并尝试获取自创建以来已修改的表的create table语句。但是,sqlite_master中的sql列具有用于生成表的相同create语句。我正在寻找更像MySQL中SHOW CREATE TABLE的结果,其中提供了当前表结构的create语句。这可能吗?我使用此create语句来帮助检查两个表的结构是否相同。如果它们不相同,那么我将进行更深入的检查,以了解它们之间到底有什么不同。
如前所述,我尝试使用sqlite_master的sql列。我还检查了PRAGMA命令,以查看我要找的东西是否存在。
我目前正在跑步
SELECT * FROM sqlite_master
这只会获取表的原始create语句,而不是复制表所需的create语句。
谢谢您的帮助!
答案 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 ...