sqlite3基础总结

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

 .headers on 或 .h on  或 .head on

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

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

格式:.indices 表名

例如:  
.indices  test

格式: .schema [table name]

例如:

.schema test

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

.mode column     或者     .m col

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

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

例如:

.output file.sql

.dump

.output stdout

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

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

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

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

格式化:

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

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

例如:

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

格式:.nullvalue 指定值

例如:

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

格式:.prompt [value]

例如:

.prompt 'sqlite3> '

.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
.open test.db

数据备份有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 不存在。如果它存在,则或许会因为数据库中有同名的对象而出错。

可操作如下:

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

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

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

和mysql建表差不多

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

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

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

drop table 表名;

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;

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

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

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

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

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

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

问题:如果一个字段已经声明为 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 亲和性是一个好的选择。

 select typeof(x),typeof(y),typeof(z)  from 表名;
例如:
explain select * from meta_layer;

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 手动提交事务。

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

Original: https://blog.csdn.net/zhangxl123liang/article/details/123904823
Author: 凉夏初晨
Title: sqlite3基础总结

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/816786/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球