sqlite会自动维护一个系统表sqlite_master,该表存储了我们所创建的各个table, view, trigger等等信息。 sqlite_master表数据字段:
type: 类型,取值一般为table, view
name:
tbl_name: 表名
rootpage: sql:创建表或者视图的sql语句,可以从该sql语句中判断某字段是否存在 sqlite_master表结构如下: CREATE TABLE sqlite_master (
type TEXT,
name TEXT,
tbl_name TEXT,
rootpage INTEGER,
sql TEXT
)
————————————————
版权声明:本文为CSDN博主「小向光」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wuyou1336/article/details/53770799

判断数据库是否存在, 表格式是否正确(版本更新时,很重要)

数据库更新,可以增加table_version 来进行判断

table_version
(
tb_name varchar(32)
tb_version UNSIGNED INTEGER NOT NULL
comment varchar(128)
) 保存每个table 版本日期, 有不一致,就修改, 历史版本在代码中有记录,可以按当前记录,去修改表结构. (如果差别太多, 就直接备份旧表,人工导出csv数据, 然后 创建新表,再导入数据)重新写代码修改 并导入,或者直接改csv 文件 sqlite_master中得到 表结构的SQL语句,自己再逐个分析 //表名已经确认
//解析括号,
//, 得到单个表结构数据, 逐个比较就行 或者直接全部比较? CREATE TABLE [Table_1004A] (
[ChipID] UNSIGNED INTEGER NOT NULL PRIMARY KEY,
[ChipType] VARCHAR(32) NOT NULL,
[BatchID] UNSIGNED INTEGER NOT NULL, [T1_TestMode] VARCHAR(32) ,
[T1_Timestamp] UNSIGNED INTEGER,
[T1_Temp] SMALLINT,
[T1_ErrSaAddrNum] UNSIGNED INTEGER,
[T1_ErrSaAddr] VARCHAR(256),
[T1_ChipResult] VARCHAR(64),
[T1_HandlerResult] UNSIGNED TINYINT, [T2_TestMode] VARCHAR(32),
[T2_Timestamp] UNSIGNED INTEGER,
[T2_Temp] SMALLINT,
[T2_ErrSaAddrNum] UNSIGNED INTEGER,
[T2_ErrSaAddr] VARCHAR(256),
[T2_ChipResult] VARCHAR(64),
[T2_RepairedSaAddr] VARCHAR(256),
[T2_HandlerResult] UNSIGNED TINYINT , [Comment] VARCHAR(256)
) SELECT name FROM sqlite_master
WHERE type=’table’
ORDER BY name; //ok
select * from sqlite_master;
select type,name,sql from sqlite_master; select type,name,sql from sqlite_master order by name; select type,name,sql from sqlite_master WHERE name='Table_1004A';

===================


//默认升序
SELECT NumID,ChipID,BatchID,T1_Timestamp FROM main.Table_1004A WHERE Table_1004A.NumID >= 1000 ORDER BY ChipID; 1010 1301000100001000 100 1570877172
1011 1301000100002001 100 1570877359
1016 1301000100004001 100 1570879295
1015 1301000100004002 100 1570879275
1014 1301000100004004 100 1570879275
1013 1301000100004010 100 1570879275
1012 1301000100004020 100 1570879274 /*==========*/ //降序
SELECT NumID,ChipID,BatchID,T1_Timestamp FROM main.Table_1004A WHERE Table_1004A.NumID >= 1000 ORDER BY ChipID DESC; 1012 1301000100004020 100 1570879274
1013 1301000100004010 100 1570879275
1014 1301000100004004 100 1570879275
1015 1301000100004002 100 1570879275
1016 1301000100004001 100 1570879295
1011 1301000100002001 100 1570877359
1010 1301000100001000 100 1570877172
insert 硬盘的IO速度,最受影响. (如果primier key 是chipID, chipID插入顺序不规律, 但是DB内部会使chipID变有序)
insert 的如果chipID 重复,就crash. 所以还要先查询下,chipID是否已经有了.(T2 也先查询下,没有也报错) 查询时间因为chipID 用RBTree建立了有序索引,所以效率还算可以, 5W记录 8ms. 如果按照之前的表设计, numID 为 primier key autoincrease, (用NumID 为索引建立RBTree)则insert 变快(因为每次都是自增的值,不用改位置), query变慢 chipID无序, //HD(7200) 写入速度:11个record每秒
SELECT COUNT(*) FROM "Table_1004A" WHERE T1_Timestamp =1571039500; //SSD(TLC) 写入速度:50个record每秒
SELECT COUNT(*) FROM "Table_1004A" WHERE T1_Timestamp =1571040594; //Memory 写入速度:大约14757个record每秒(100W/70s),cpu i5-8400@2.8G 负载25%(可能只用到了单核心,多核心可以加倍), 内存占用100MB左右
SELECT COUNT(*) FROM "Table_1004A" WHERE T1_Timestamp =1571122590; //查询时间118ms SELECT * FROM "Table_1004A" WHERE ChipID=1301000100001000; //单值修改 UPDATE employees
SET lastname = 'Smith'
WHERE employeeid = 3; //多值修改
UPDATE table
SET column_1 = new_value_1,
column_2 = new_value_2
WHERE
search_condition
ORDER column_or_expression
LIMIT row_count OFFSET offset; /*==========*/
UPDATE Table_1004A SET T2_Timestamp=1571041417 WHERE ChipID=1301000100001011; SELECT * FROM "Table_1004A" WHERE T2_Timestamp NOTNULL; SELECT * FROM "Table_1004A" WHERE T2_Timestamp=1571041417;
Paginate 页码  共多少页,每页多少数据
https://sqlkata.com/docs/execution/fetching-records var page1 = query.Paginate(1); foreach(var item in page1.Each)
{
// print items in the first page
} var page2 = page1.Next(); // same as query.Paginate(2) foreach(var item in page2.Each)
{
// print items in the 2nd page
} var users = query.Paginate(1, 10); foreach(var user in users.Each)
{
Console.WriteLine($"Id: {user.Id}, Name: {user.Name}");
}
//找到最大的rowid(如果是自定义的primaryKey, 比如 NumID  则都可以用,  反正是alias 别名)
SELECT *,MAX(rowid) FROM Table_1004A;//推荐
SELECT *,MAX(NumID ) FROM Table_1004A;//推荐 SELECT rowid FROM Table_1004A ORDER BY ROWID DESC LIMIT(1);
SELECT *,rowid FROM Table_1004A ORDER BY ROWID DESC LIMIT(1); //SELECT *,rowid FROM Table_1004A LIMIT 53000,1000 //返回最后一次insert的rowid,如果没有插入就返回0 (开机重启后也返回0, 是记录在内存中)
SELECT LAST_INSERT_ROWID(); //SELECT * FROM Table_1004A where rowid=LAST_INSERT_ROWID(); SELECT *,rowid "NAVICAT_ROWID" FROM "main"."Table_1004A" LIMIT 53000,1000 //=============== //时间: 0.03s
INSERT INTO "main"."Table_1004A"("ChipID", "ChipType", "BatchID", "T1_TestMode", "T1_Timestamp", "T1_Temp", "T1_ErrSaAddrNum", "T1_ErrSaAddr", "T1_ChipResult", "T1_HandlerResult",
"T2_TestMode", "T2_Timestamp", "T2_Temp", "T2_ErrSaAddrNum", "T2_ErrSaAddr", "T2_ChipResult", "T2_RepairedSaAddr", "T2_HandlerResult", "Comment")
VALUES (1301000100005001, 'XM1004_A_DWL', 100, 'ArrayWR', 1571106878, 120, 5, '1,2,3,4,5', 'Finish_MarchC', 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); //INSERT后, LAST_INSERT_ROWID() 结果显示53102 + 显示最后插入信息
1. SELECT LAST_INSERT_ROWID();
2. SELECT *,rowid FROM Table_1004A WHERE rowid= 53102; //2句话,一句搞定
SELECT *,rowid FROM Table_1004A WHERE rowid=LAST_INSERT_ROWID();


            //SQLiteConfigDbOpsEnum sQLiteConfigDbOpsEnum = SQLiteConfigDbOpsEnum.SQLITE_DBCONFIG_NONE;
//connection.SetConfigurationOption(sQLiteConfigDbOpsEnum, ); //var users = new XQuery(connection, compiler).From("Users").Limit(10).Get(); var db = new QueryFactory(connection, compiler);
// You can register the QueryFactory in the IoC container
var query = db.Query("UsersTable").Where("Id", 1).Where("Status", "Active").First(); /*
var query = new Query()
.Select("client.Id")
.From("schema.client as c")
.Join("schema.order as o", "c.Id", "o.ClientId")
.WhereIn("c.Id", new[] { 1, 2, 3 });
*/

sqlite 版本更新维护, 表结构判断, 更新的更多相关文章

  1. BIEE从底层表结构向上更新

    影响BIEE查询结果的几个因素: 1.数据库表结构变化后,RPD如何处理? 更新物理层 增加.删除.修改表名. 添加字段:右键点击连接池,点击导入元数据.勾掉关键字,重新导入那张表. 删除字段:直接右 ...

  2. ef codefirst VS里修改数据表结构后更新到数据库

    2.根据已建立table的数据库建立ADO.NET数据模型在修改表后进入 工具->nuget包管理器->程序包管理器控制台 输入  enable-migrations   后vs会添加一个 ...

  3. mysql在线修改表结构大数据表的风险与解决办法归纳

    整理这篇文章的缘由: 互联网应用会频繁加功能,修改需求.那么表结构也会经常修改,加字段,加索引.在线直接在生产环境的表中修改表结构,对用户使用网站是有影响. 以前我一直为这个问题头痛.当然那个时候不需 ...

  4. 【VBA】EXCEL通过VBA生成SQL,自动生成创建表结构SQL

    原文:https://blog.csdn.net/zutsoft/article/details/45441343 编程往往与数据库密不可分,一个项目往往有很多的表,很多时候通过excel来维护表结构 ...

  5. 数据库遇到的问题——mysql在线修改表结构大数据表的风险与解决办法归纳

    互联网应用会频繁加功能,修改需求.那么表结构也会经常修改,加字段,加索引.在线直接在生产环境的表中修改表结构,对用户使用网站是有影响. 以前我一直为这个问题头痛.当然那个时候不需要我来考虑,虽然我们没 ...

  6. [20171113]修改表结构删除列相关问题3.txt

    [20171113]修改表结构删除列相关问题3.txt --//维护表结构删除字段一般都是先ALTER TABLE <table_name> SET UNUSED (<column_ ...

  7. [20171113]修改表结构删除列相关问题.txt

    [20171113]修改表结构删除列相关问题.txt --//维护表结构删除字段一般都是先ALTER TABLE <table_name> SET UNUSED (<column_n ...

  8. Sqlite表结构读取工具,word批量转html,在线云剪贴板,文件批量提取工具;

    工欲善其事必先利其器,本周为您推荐工具排行 Sqlite表结构读取工具,word批量转html,在线云剪贴板,文件批量提取工具:     本周我们又要发干货了,准备好接受了吗? 为什么是干货,就是因为 ...

  9. 开源一个适用iOS的数据库表结构更新机制的代码

    将前段时间开源的代码.公布一下: ARDBConfig On the iOS, provide a database table structure update mechanism, ensure ...

随机推荐

  1. 洛谷P2305 [NOI2014]购票 [DP,树状数组]

    传送门 思路 显然是树形DP,显然是斜率优化,唯一的问题就是该怎么维护凸包. 套路1:树上斜率优化,在没有这题的路程的限制的情况下,可以维护一个单调栈,每次加入点的时候二分它会加到哪里,然后替换并记录 ...

  2. Hbuild在线云ios打包失败,提示BuildConfigure Failed 31013 App Store 图标 未找到 解决方法

    用 hbuild 打 IOS 包,打包失败,提示以下错误: manifest.plus.plugins.push.igexin;manifest.plus.plugins.oauth.weixin; ...

  3. AGC022E Median Replace

    题意 给出一个长度为奇数\(n\)的残缺01串,问有多少种补全方法,每次将连续三个位替换为它们的中位数后,能有一种方案使它变为1. \(n \le 3*10^5\) 思路 左边表示栈顶. 将操作简化为 ...

  4. iOS开发~防止navigation多次push一个页面

    在点击push下一个页面时,因为各种原因,点一下cell或按钮没有响应,用户可能就多点几下,这时候会打开好几个一样的页面. 这是因为push后的页面有耗时操作或者刚好push到另一个页面时,另一个页面 ...

  5. 代码检查p626

    1 编译运行p626 图10-3代码,提交编译运行的截图 2 STDOUT_FILENO的值是多少?提交在Ubuntu中查找这个值的命令截图

  6. 使用requirejs+vue 打造 无需编译发布便捷修改调整的模块开发方案 (一)

    前言 不知道大家有没有这种感觉,现在流行的很多前端技术,基本上都基于webpack编译,当然不是说这种方案不好,在标准的开发流程运行中,这种方式其实也挺不错,管理方便,代码统一. 痛点:项目不是单独针 ...

  7. VGG网络-ILSVRC-2014亚军

    用于大尺度图片识别的非常深的卷积网络 使用一个带有非常小的(3*3)的卷积核的结构去加深深度,该论文的一个十分重要的改进就是它将卷机网络的深度增加到了16-19层,且可以用于比较大224*224的图片 ...

  8. python基础之面向对象(二)

    一点提醒 首先在使用pickle读取load时,需要先把使用到的类import上,否则会报错.在pycharm中使用时不会报错,但在linux或者cmd时就会报错!必须import. 报错提示: Fi ...

  9. SpringBoot集成tk mybatis插入数据,回显主键为null

    实体信息如下 @Data public class ApiCertificate{ @Id @GeneratedValue(generator = "JDBC") private ...

  10. kubenetes安装

    master节点主要由四个模块组成: APIServer   提供了资源操作的唯一入口,任何对资源进行增删改查的操作都要交给APIServer处理后再提交给etcd.kubectl就是对api ser ...