sqlite3基础总结

目录

1.简介

2.基础命令操作

1.查看表头命令

2.查看表的索引

3.查看表或视图的定义(DDL)语句

4. 格式化输出sql语句内容

5.数据导出

6.数据导入

7.命名回显

8.设置NULL值为指定值

9.设置CLP的shell提示符

10.  设置结果数据的输出格式

3. 数据库基础操作

1. 创建数据库

2.备份数据库

3.删除数据库

4.建表

5. 删除表

6. 创建视图

7. 创建索引

8.限定和排序

9.函数和聚合

10.NULL 和 UNIQUE

11.查询字段类型sql

12. SQLite 会显示编译后的 VDBE 汇编程序

4. 连接与事务

1.简介

SQLite 是一个开源的、内嵌式的关系型数据库。它最初发布于 2000 年,在便携性、易用性、
紧凑性、有效性和可靠性方面有突出的表现。

SQLite 使用 B-tree 处理索引,使用 B+tree 处理表数据。

2.基础命令操作

1.查看表头命令

 .headers on 或 .h on  或 .head on

查询时显示表头: .headers on / .h on / .head on

.headers 设置为 on 时,查询结果显示时带有字段名,默认值是 off。

2.查看表的索引

格式:.indices 表名 

例如:  
.indices  test

3.查看表或视图的定义(DDL)语句

格式:  .schema [table name]

例如:

.schema test

更详细的 schema 信息可以通过 SQLite 唯一的一个系统视图 sqlite_master 得到。

4. 格式化输出sql语句内容

.mode column     或者     .m col 

5.数据导出

可以使用.dump 命令将数据库导出为 SQL 格式的文件。

不使用任何参数,.dump 将导出整个数据库。如果提供参数,CLP 把参数理解为表名或视图名

例如:

.output file.sql

.dump

.output stdout

使用上面3个命令可以导出该数据库对应的sql语句,生成到file.sql文件中。

6.数据导入

有两种方法可以导入数据,用哪种方法决定于要导入的文件的格式。如果文件由 SQL 语句 构成,可以使用.read 命令导入(执行)文件。如果文件是由逗号或其它定界符分隔的值 (comma-separated values, CSV)组成,可使用.import [file][table]命令,此命令将解析指定的文件并尝试将数据插入到指定的表中。

.read 命令用来导入由.dump 命令创建的文件。如果要使用前面作为备份文件所导出的file.sql,需要先移除已经存在的数据库对象(表和视图),然后用下面方法导入:

drop table 表名;  #先删除该数据库中的所有表
.read file.sql

格式化:

CLP 提供了几个格式化选项命令。

7.命名回显

.echo on命令设置为新输入的命令在执行前都会回显,默认值是 off。

例如:

.echo on    在执行 select * from test; 时会在执行结果前显示该执行语句。

8.设置NULL值为指定值

格式:.nullvalue 指定值

例如:

.nullvalue 命令设置NULL值时,默认情况下使用空串,若显示为NULL使用.nullvalue NULL设置。

9.设置CLP的shell提示符

格式:.prompt [value]

例如:

.prompt 'sqlite3> '

10.  设置结果数据的输出格式

.mode 命令可以设置结果数据的几种输出格式。可选的格式为 csv、column、html、insert、line、list、tabs 和 tcl。默认值是 list,在此模式下显示结果时列间以默认的分隔符分隔。如果你想以 CSV 格式输出一个表的数据,可如下操作:

sqlite3>.output file.csv
sqlite3>.separator ,
sqlite3>select * from test;
sqlite3>.output stdout

因为有一个 CSV 模式,所以下面的命令会得到相似的结果:

sqlite3> .output file.csv
sqlite3> .mode csv
sqlite3> select * from test;
sqlite3> .output stdout

3. 数据库基础操作

1. 创建数据库

.open test.db

2.备份数据库

数据备份有2种方法:

1》直接在命令行执行如下语句

sqlite3  test.db .dump >  test.sql

2》在 CLP 中执行:

sqlite> .output test.sql
sqlite> .dump
sqlite> .exit

导入一个 SQL 格式备份的数据库可如下做:

sqlite3 test.db < test.sql

此处假设 test.db 不存在。如果它存在,则或许会因为数据库中有同名的对象而出错。

可以用复制的方法得到一个二进制的数据库文件拷贝。但也许在复制之前你想先抽空 (vacuum)它,也就是释放数据库文件中未使用的空间,以得到一个更小的数据库文件。

可操作如下:

sqlite3 test.db VACUUM
cp test.db test.backup

一般情况下,二进制的备份不如SQL备份兼容性好。尽管 SQLite 有很好的向上兼容性和各 操作系统间文件格式的一致性,但如果想要将备份文件保留很长时间,还是 SQL 格式保险 一些。

3.删除数据库

当一个数据库你不想再用时,简单地从操作系统中将其文件删除就行了。

4.建表

和mysql建表差不多

修改表:SQLite 版的 ALTER TABLE 命令既可以改变 表名,也可以增加字段。

alter table foods add column email text not null default '' collate nocase;
alter table foods drop column email ;  

支持修改表添加/删除列,但无法修改表中字段。

5. 删除表

drop table 表名; 

6. 创建视图

create view 视图名 as select * from 表名;

例如:

create view schema as select * from sqlite_master;
select type,name,tbl_name,sql from sqlite_master  order by type;

7. 创建索引

create index 索引名 on 表名 (字段名);

8.限定和排序

可以用 LIMIT 和 OFFSET 保留字限定结果集的大小和范围。LIMIT 指定返回记录的最大数 量。OFFSET 指定偏移的记录数。

例如,下面的命令返回 food_types 表中 id 排第 2 的记录:

SELECT * FROM food_types LIMIT 1 OFFSET 1 ORDER BY id; 保留字 OFFSET 在结果集中跳过一行(Bakery),保留字 LIMIT 限制最多返回一行(Cereal)。

9.函数和聚合

函数的种类包括:数学函数,如ABS()计算绝对值;字符串格式函数,如UPPER()和 LOWER(),它们将字符串的值 转化为大写或小写。

标准的聚合函数包括 SUM()、AVG()、 COUNT()、MIN()和 MAX()。

10.NULL 和 UNIQUE

问题:如果一个字段已经声明为 UNIQUE,可以向这个字段插入多少个 NULL 值? 回答:与数据库的种类有关。PostgreSQL 和 Oracle 可以插入多个。Informix 和 Microsoft SQLServer只能一个。DB2、SQLAnywhere和Borland Inter-Base不能。SQLite采用了与PostgreSQL和 Oracle 相同的解决方案。

另一个困扰大家的关于 NULL 的经典问题是:两个 NULL 值是否相等?你没有足够的信息 来证明它们相等,但也没有足够的信息证明它们不等。SQLite 的观点是假设所有的 NULL都是不同的。所以你可以向唯一字段中插入任意多个 NULL 值。

不同存储类的值可以通过它们各自类的“类值”进行 排序,定义如下:

1. NULL 存储类具有最低的类值。

2. INTEGER 或 REAL 存储类值高于 NULL,它们的类值相等。

3. TEXT 存储类的值比 INTEGER 和 REAL 高。数值永远比字符串的值低。

4. BLOB 存储类具有最高的类值。具有 BLOB 类的值大于其它所有类的值。

SQLite默认的亲和性是NUMERIC。如果你暂时还不确定要往一个字段里放什么内容,或准备将来修改,用 NONE 亲和性是一个好的选择。

11.查询字段类型sql

 select typeof(x),typeof(y),typeof(z)  from 表名;

12. SQLite 会显示编译后的 VDBE 汇编程序

例如:
explain select * from meta_layer;

4. 连接与事务

SQLite 默认情况下,每条 SQL 语句自成事务(自动提交模式)。

连接缓冲区大小

缓冲区尺寸 pragma 控制一个连接可以在内存中使用多少个数据库页。

要查看当前缓冲区大 小的默认值,执行:

sqlite> PRAGMA cache_size;

要改变缓冲区大小,执行:

sqlite> PRAGMA cache_size=10000;
sqlite> PRAGMA cache_size;
sqlite> pragma database_list;
sqlite> CREATE INDEX foods_name_type_idx ON foods(name,type_id);
sqlite> pragma index_info(foods_name_type_idx);
sqlite> pragma index_list(foods)
sqlite> pragma table_info(foods);

sqlite_master 表是一个系统表,它包含数据库中所有表、视图、索引和触发器的信息。

关于连接和事务,你必须知道两件事:

(1)对数据库的任何操作,一个连接存在于一个事务之下。

(2)一个连接绝不会同时存在于多个事务之下。无论何时,一个连接在对数据

库做任何操作时,都总是在恰好一个事务之下,不会多,也不会少。

连接的生命周期(The Connection Lifecycle)

和大多数据库连接相同,其生命周期由三个阶段构成:

1. 连接数据库(Connect to the database)。

2. 处理事务(Perform transactions):如你所知,任何命令都在事务下执行。默认情况下,事 务自动提交,也就是每一个 SQL 语句都在一个独立的事务下运行。当然也可以通过使用

BEGIN..COMMIT 手动提交事务。

3. 断开连接(Disconnect from the database):关闭数据库文件。还要关闭所有附加的数据库文件。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本文档格式为word文档,包含了相应的目录结构。 Python教程 1 关于作者 2 Python简介 2 1 安装Python 5 1.1 Python解释器 8 2 第一个Python程序 9 2.1 使用文本编辑器 10 2.2 输入和输出 14 3 Python基础 17 3.1 数据类型和变量 18 3.2 字符串和编码 25 3.3 使用list和tuple 34 3.4 条件判断 39 3.5 循环 43 3.6 使用dict和set 45 4 函数 50 4.1 调用函数 52 4.2 定义函数 54 4.3 函数的参数 58 4.4 递归函数 70 5 高级特性 73 5.1 切片 73 5.2 迭代 77 5.3 列生成式 79 5.4 生成器 81 5.5 迭代器 88 6 函数式编程 90 6.1 高阶函数 91 6.1.1 map/reduce 94 6.1.2 filter 97 6.1.3 sorted 100 6.2 返回函数 101 6.3 匿名函数 105 6.4 装饰器 106 6.5 偏函数 110 7 模块 112 7.1 使用模块 114 7.2 安装第三方模块 118 8 面向对象编程 120 8.1 类和实例 122 8.2 访问限制 126 8.3 继承和多态 128 8.4 获取对象信息 134 8.5 实例属性和类属性 141 9 面向对象高级编程 143 9.1 使用__slots__ 143 9.2 使用@property 146 9.3 多重继承 149 9.4 定制类 154 9.5 使用枚举类 164 9.6 使用元类 167 10 错误、调试和测试 175 10.1 错误处理 176 10.2 调试 186 10.3 单元测试 191 10.4 文档测试 196 11 IO编程 200 11.1 文件读写 201 11.2 StringIO和BytesIO 205 11.3 操作文件和目录 207 11.4 序列化 210 12 进程和线程 215 12.1 多进程 217 12.2 多线程 225 12.3 ThreadLocal 232 12.4 进程 vs. 线程 235 12.5 分布式进程 237 13 正则达式 243 13.1 常用内建模块 249 13.1.1 datetime 249 13.1.2 collections 254 13.1.3 base64 258 13.1.4 struct 260 13.1.5 hashlib 262 13.1.6 itertools 267 13.1.7 XML 270 13.1.8 HTMLParser 272 13.1.9 urllib 274 14 常用第三方模块 278 14.1 PIL 278 15 virtualenv 282 16 图形界面 284 17 网络编程 288 17.1 CP/IP简介 289 17.2 TCP编程 291 17.3 UDP编程 296 18 电子邮件 298 18.1 SMTP发送邮件 300 18.2 POP3收取邮件 308 19 访问数据库 314 19.1 使用SQLite 318 19.2 用MySQL 321 19.3 使用SQLAlchemy 324 20 Web开发 329 20.1 HTTP协议简介 330 20.2 HTML简介 337 20.3 WSGI接口 341 20.4 使用Web框架 347 20.5 使用模板 352 21 异步IO 357 21.1 协程 359 21.2 syncio 362 21.3 async/await 366 21.4 aiohttp 367 22 实战 369 22.1 Day 1 - 搭建开发环境 372 22.2 Day 2 - 编写Web App骨架 374 22.3 Day 3 - 编写ORM 375 22.4 Day 4 - 编写Model 385 22.5 Day 5 - 编写Web框架 390 22.6 Day 6 - 编写配置文件 396 22.7 Day 7 - 编写MVC 398 22.8 Day 8 - 构建前端 399 22.9 Day 9 - 编写API 410 22.10 Day 10 - 用户注册和登录 412 22.11 Day 11 - 编写日志创建页 423 22.12 Day 12 - 编写日志列页 432 22.13 Day 13 - 提升开发效率 439 22.14 Day 14 - 完成Web App 443 22.15 Day 15 - 部署Web App 445 22.16 Day 16 - 编写移动App 454 23 FAQ 456 24 期末总结 458
廖雪峰的 Python 教程 4 关于作者 4 Python 简介 6 安装 Python 9 Python 解释器 12 第一个 Python 程序 14 使用文本编辑器 17 Python 代码运行助手 20 输入和输出 25 Python 基础 28 数据类型和变量 29 字符串和编码 37 使用 list 和 tuple 46 条件判断 53 循环 58 使用 dict 和 set 63 函数 70 调用函数 72 定义函数 75 函数的参数 80 递归函数 93 高级特性 97 切片 98 迭代 102 列生成式 105 生成器 109 迭代器 118 函数式编程 121 高阶函数 122 map/reduce 125 filter 130 sorted 134 返回函数 137 匿名函数 141 装饰器 143 偏函数 148 模块 151 使用模块 153 安装第三方模块 157 面向对象编程 159 类和实例 161 访问限制 165 继承和多态 169 获取对象信息 175 实例属性和类属性 183 面向对象高级编程 185 使用 slots 186 使用@property 189 多重继承 193 定制类 198 使用枚举类 209 使用元类 212 错误、调试和测试 221 错误处理 222 调试 233 单元测试 239 文档测试 244 IO 编程 249 文件读写 250 StringIO 和 BytesIO 254 操作文件和目录 257 序列化 261 进程和线程 267 多进程 269 多线程 278 ThreadLocal 285 进程 vs. 线程 289 分布式进程 292 正则达式 298 常用内建模块 304 datetime 305 collections 312 base64 317 struct 320 hashlib 322 itertools 327 contextlib 331 XML 336 HTMLParser 341 urllib 344 常用第三方模块 349 virtualenv 355 图形界面 357 网络编程 361 TCP/IP 简介 362 TCP 编程 364 UDP 编程 370 电子邮件 373 SMTP 发送邮件 375 POP3 收取邮件 384 访问数据库 390 使用 SQLite 395 使用 MySQL 399 使用 SQLAlchemy 403 Web 开发 408 HTTP 协议简介 410 HTML 简介 417 WSGI 接口 422 使用 Web 框架 428 使用模板 433 异步 IO 439 协程 441 asyncio 445 async/await 449 aiohttp 451 实战 453 Day 1 - 搭建开发环境 457 Day 2 - 编写 Web App 骨架 459 Day 3 - 编写 ORM 461 Day 4 - 编写 Model 471 Day 5 - 编写 Web 框架 477 Day 6 - 编写配置文件 484 Day 7 - 编写 MVC 486 Day 8 - 构建前端 488 Day 9 - 编写 API 499 Day 10 - 用户注册和登录 501 Day 11 - 编写日志创建页 511 Day 12 - 编写日志列页 520 Day 13 - 提升开发效率 527 Day 14 - 完成 Web App 532 Day 15 - 部署 Web App 534 Day 16 - 编写移动 App 544 FAQ 546 期末总结 549
目 录 I 关于本博客的主题 III 第一章 什么是Android 1 什么是Android - 嵌入式设备编程的历史-第一章(1) 1 开放手机联盟和Android-(2) 2 介绍Android 第一章(3) 2 Android示例 - 第四章(4) 3 Android的几个示例 - 第四章(5) 4 第二章 下载和安装Eclipse总则 5 下载和安装Eclipse总则 - 第二章(1) 5 下载和安装JRE - 第二章(2) 6 下载和安装Eclipse - 第二章(3) 7 第三章 下载和安装Android SDK 8 下载和安装Android SDK - 第三章(1) 8 下载Android SDK - 第三章(2) 9 为Eclipse配置Android Plugin - 第三章(3) 10 第四章 浏览Android SDK 11 浏览Android SDK - 第四章(1) 11 Android SDK是什么 - 第四章(2) 12 Android 文档 - 第四章(3) 12 Android示例 - 第四章(4) 13 Android的几个示例 - 第四章(5) 14 Android工具 - 第四章(6) 14 Android APIs - 第四章(7) 15 应用程序生命周期 - 第四章(8) 16 第五章Android程序:Hello World! 17 Android程序:Hello World! -第五章(1) 17 仔细查看Android创建的文件 - 第五章(2) 19 引用库和目录 - 第五章(3) 20 Hello World!自动产生文件的详解 - 第五章(4) 21 Hellow World! 再来一次 - 第五章(5) 23 Hello World! 使用一个图形 - 第五章(6) 25 Hello World!代码为基的UI-第五章(7) 26 Hello World! XML为基的UI - 第五章(8) 27 第六章 使用命令行工具和Android模拟器 29 使用命令行工具和Android模拟器 - 第六章(1) 29 利用Windows CLI创建一个壳活动 - 第六章(2) 29 运行ActivityCreator.bat - 第六章(3) 30 项目结构 - 第六章(4) 32 在Windows CLI下创建Hello World!活动 - 第六章(5) 36 增加JAVA_HOME 第六章 (6) 36 编译并安装应用程序 第六章(7) 37 如果运行ANT时出错该怎么办? 第六章(8) 37 用adb安装你的应用程序 第六章(9) 40 运行应用程序产生了一个错误怎么办 - 第六章(10) 41 卸载一个较早的活动 - 第六章(11) 41 重新安装并启动应用程序 - 第六章(12) 42 Linux上的Hello World! 第六章(13) 42 在CLI中创建一个图片基础的Hello World! 第六章(14) 44 第七章 使用Intents 和电话拨号盘 44 使用Intents 和电话拨号盘 第七章(1) 44 Intents是什么? 第七章(2) 45 使用拨号盘 第七章(3) 49 从你的活动中打出电话 第七章(4) 51 编辑活动许可 第七章(5) 53 修改AndroidPhoneDialer 第七章(6) 55 执行一个EditText View 第七章(7) 58 试试这个:修改AndoridPhoneDialer项目 第七章(8) 61 第八章 列,菜单和其它Views 63 列,菜单和其它Views 第八章(1) 63 修改AndroidManifest.xml文件 第八章(2) 65 使用菜单 第八章(3) 67 为AutoComplete创建一个活动 第八章(4) 71 按钮 第八章(5) 77 CheckBox 第八章(6) 80 EditText 第八章(7) 85 RadioGroup 第八章(8) 89 Spinner 第八章(9) 93 试试这个:修改更多的View属性 第八章(10) 98 第九章 使用手机的GPS功能 98 使用手机的GPS功能 第九章(1) 98 什么是轨迹文件 第九章(2) 101 使用Android位置基础API读取GPS 第九章(3) 102 书写代码来允许活动 第九章(4) 105 传递坐标到Google地图 第九章(5) 107 增加缩放控制 第九章(6) 110 试试这个:在MapView之间转换 第九章(7) 114 第十章 使用Google API的Gtalk 118 使用Google API的GTalk 第十章(1) 118 在Android中执行GTalk 第十章(2) 120 编译并运行GoogleAPI 第十章(3) 126 试试这个:为GoogleAPI活动增加设置特性 第十章(4) 128 第十一章 应用程序:找一个朋友 128 应用程序:找一个朋友 第十一章(1) 128 创建一个SQLite数据库 第十一章(2) 129 创建一个定制的Content Provider 第十一章(3) 130 创建Content Provider 第十一章(4) 132 创建FindAFriend活动 第十一章(5) 141 创建NameEditor活动 第十一章(6) 143 创建LocationEditor活动 第十一章(7) 146 创建FriendsMap活动 第十一章(8) 154 创建FindAFriend活动 第十一章(9) 160 运行FindAFriend活动 第十一章(10) 163 Android SDK 工具参考 第十二章 (完) 164 Android SDK 工具参考 第十二章 (完) 164 Android SDK 1.5 - 包装索引 169
有四个文档,分别为: Android界面设计讲课流程.doc; Android界面设计讲课流程 1 第1章 布局方式 3 第2章 对话框 11 第3章 硬件菜单 17 第4章 输入选择组件 19 第5章 图片和按钮 30 第6章 日期和时间控件 34 第7章 进度条和滑动条 37 第8章 GridView和Gallery控件 43 第9章 AutoCompleteTextView提示输入建议 48 第10章 RatingBar评分组件 50 Android进阶讲课流程2.doc; 1. 广播接收者 3 2. 服务Service 7 3. AsyncTask异步处理任务 15 4. 音频播放 20 8. 视频播放 26 9. 使用摄像头拍照 32 10. 视频录制 39 11. 国际化 43 12. 样式和主题 46 13. 编码实现软件界面 49 14. 标签页(选项卡) 51 15. 用HTML实现网页界面 57 16. android客户端调用web service 63 Android开发讲课流程.doc; Android简介 3 第一章 搭建Android开发环境 4 第二章 Android工程目录介绍 9 第三章 电话拨号器和发送短信小程序 12 第四章 日志输出和单元测试 17 第五章 数据的存储与访问 19 第六章 SD卡的存取和XML读取 24 第七章 SharedPreferences进行数据存储 38 第八章 SQLITE数据库 42 第九章 ListView控件的使用 50 第十章 Activity互相调用 62 第十一章 意图Intent的使用 70 第十二章 Activity的生命周期 72 第十三章 互联网开发 77 第十四章 JSON数据的解析 90 JAVA基础知识点总结.doc 第1章 Java程序设计概述 第2章 Java语言的开发环境 第3章 Java程序的基本结构 第4章 对象和类 第5章 继承和多态 第6章 泛型程序设计 第7章 接口和内部类 第8章 异常处理 第9章 反射,代理,标注 第10章 java常用类 第11章 IO流 第13章 线程

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值