`
hehez
  • 浏览: 12482 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

sqlite3 学习 记录

阅读更多
创建数据库
在cmd下面调用sqlite3.exe,创建数据命令如下:
sqlite3 db_name.xx;
数据库名称任意,创建后直接进入数据库;如果文件存在,则直接打开;

SQL的指令格式
所有的SQL的指令都是以分号(;)结尾的,为增加可读性,允许一个指令多行编辑,直到遇到分号结束指令;
sqlite3中两个减号(--)代表注释,sqlite会忽略。

创建表
键入以下指令即可创建一个tab_name表:
create table tab_name (field1, field2, field3...);
sqlite3对字段没有严格要求,字段可以存储任何类型数据,它会适时的自动转换,当然,你也可以创建表的时候对数据类型进行定义。

数据类型
NULL
INTEGER
REAL
TEXT
BLOB
但实际上,sqlite3也接受如下的数据类型:
smallint 16 位元的整数。
interger 32 位元的整数。
decimal(p,s) p 精确值和 s 大小的十进位整数,精确值p是指全部有几个数(digits)大小值,s是指小数点後有几位数。如果没有特别指定,则系

统会设为 p=5; s=0 。
float   32位元的实数。
double   64位元的实数。
char(n)   n 长度的字串,n不能超过 254。
varchar(n) 长度不固定且其最大长度为 n 的字串,n不能超过 4000。
graphic(n) 和 char(n) 一样,不过其单位是两个字元 double-bytes, n不能超过127。这个形态是为了支援两个字元长度的字体,例如中文字。
vargraphic(n) 可变长度且其最大长度为 n 的双字元字串,n不能超过 2000
date   包含了 年份、月份、日期。
time   包含了 小时、分钟、秒。
timestamp 包含了 年、月、日、时、分、秒、千分之一秒。


查看
.database 显示数据库信息;
.tables 显示表名称;(好像.table也可以)
.schema 命令可以查看创建数据表时的SQL命令;
.schema table_name 查看创建表table_name时的SQL的命令;

插入记录
insert into table_name values (field1, field2, field3...);

查询
select * from table_name;查看table_name表中所有记录;
select * from table_name where field1='xxxxx'; 查询符合指定条件的记录;

删除
drop table_name;     删除表;
drop index_name;     删除索引;

改变输出格式

.mode list|column|insert|line|tabs|tcl|csv
.separator "X" 更改分界符号为X

更改输出
.output file_name|stdout
输出到文件或者标准输出(默认终端)


.databases               列出数据库文件名
.tables ?PATTERN?        列出?PATTERN?匹配的表名
.import FILE TABLE       将文件中的数据导入的文件中
.dump ?TABLE?            生成形成数据库表的SQL脚本
.output FILENAME         将输出导入到指定的文件中
.output stdout           将输出打印到屏幕
.mode MODE ?TABLE?       设置数据输出模式(csv,html,tcl…
.nullvalue STRING        用指定的串代替输出的NULL串
.read FILENAME           执行指定文件中的SQL语句
.schema ?TABLE?          打印创建数据库表的SQL语句
.separator STRING        用指定的字符串代替字段分隔符
.show                    打印所有SQLite环境变量的设置
.quit                    退出命令行接口


1.存储类别

第二版把所有列的值都存储成ASCII文本格式。第三版则可以把数据存储成整数和实数,还可以存储BLOB数据.

Each value stored in an SQLite数据库中存储的每个值都有一个属性,都属于下面所列类中的一种,(被数据库引擎所控制)

NULL: 这个值为空值
INTEGER: 值被标识为整数,依据值的大小可以依次被存储为1,2,3,4,5,6,7,8.
REAL: 所有值都是浮动的数值,被存储为8字节的IEEE浮动标记序号.
TEXT: 文本. 值为文本字符串,使用数据库编码存储(TUTF-8, UTF-16BE or UTF-16-LE).
BLOB: 值是BLOB数据,如何输入就如何存储,不改变格式.

像SQLite2.0版一样,在3.0版中,除了INTEGER PRIMARY KEY,数据库中的任何列都可以存储任何类型的数据. 这一规则也有例外,在下面的"严格相似

模式"中将描述.

输入SQLite的所有值,不管它是嵌入 SQL语句中的文字还是提前编译好的绑定在SQL语句中的值, 在SQL语句执行前都被存储为一个类.在下面所描述

的情况下,数据库引擎将在执行时检查并把值 在数字存储类(整数和实数)和文本类间转换.

存储的类别最初被分类为如下:

具体的值比如SQL语句部分的带双引号或单引号的文字被定义为文本,如果文字没带引号并没有小数点或指数则被定义为整数,如果文字没带引号但有

小数点或指数则被定义为实数, 如果值是空则被定义为空值.BLOB数据使用符号X'ABCD'来标识.

Values supplied using the 被输入的值使用sqlite3_bind_* APIs的被分类一个存储等级, 这等级是和原来的类基本相一致的. (比如

qlite3_bind_blob()绑定一个BLOB的值).

值的分类是SQL分等级操作的结果,决定于最远的操作表达式.用户定义的功能也许会把值返回任意的类.在编译的时候来确定表达式的存储类基本是

不可能的.

2. 列之间的亲和性

在SQLite3.0版中,值被定义为什么类型只和值自身有关,和列没有关系,和变量也没有关系. (这有时被称作 弱类型.)所有其它的我们所使用的数据

库引擎都受静态类型系统的限制, 其中的所有值的类是由其所属列的属性决定的,而和值无关.

为了最大限度的增加SQLite数据库和其他数据库的兼容性,SQLite支持列的"类型亲和性".
列的亲和性是为该列所存储的数据建议一个类型.我们要注意是建议而不是强迫. 在理论上来讲,任何列依然是可以存储任何类型的数据的. 只是针

对某些列,如果给建议类型的话,数据库将按所建议的类型存储.这个被优先使用的数据类型则被称为"亲和类型".

在SQLite3.0版中,数据库中的每一列都被定义为以下亲和类型中的一种:

TEXT
NUMERIC
INTEGER
REAL
NONE

一个具有类型亲和性的列按照无类型,文本,或BLOB存储所有的数据.如果数字数据被插入一个 具有文本类型亲和性的列,在存储之前数字将被转换成

文本.

一个具有数字类型亲和性的列也许使用所有的五个存储类型存储值.当文本数据被插入一个数字列时, 在存储之前,数据库将尝试着把文本转换成整

数或实数.如果能成功转换的话,值将按证书活实数的类型被存储. 如果不能成功转换的话,值则只能按文本类型存储了,而不会被转换成无类型或

BLOB类型来存储.

一个具有整数亲和力的列在转换方面和具有数字亲和力的列是一样的,但也有些区别 , 比如没有浮动量的实值(文本值转换的值)被插入具有整数亲

和力的列时,它将被转换成整数并按整数类型存储.

一个具有无类型亲和力的列不会优先选择使用哪个类型.在数据被输入前它不会强迫数据转换类型.

2.1 列的亲和性的决定

一个列的亲和类型是由该列所宣称的类型决定的.遵守以下规则:

a. 如果数据类型包括字符串"INT"那么它被定义成具有整数亲和性.
b. 如果列中的数据类型包括以下任何的字符串 "CHAR", "CLOB", or "TEXT" 那么这个列则具有文本亲和性.要注意VARCHAR类型包括字符串"CHAR"

因此也具有文本类型亲和性.
c. 如果一个列的数据类型包括字符串"BLOB"或者如果数据类型被具体化了,
   那么这个列具有无类型亲和性.
d. 否则就具有数字类型亲和性.

如果表格使用If "CREATE TABLE AS SELECT..."语句生成的,那么所有的列则都没有具体的数据类型,则没有类型亲和性.

2.2 列的亲和性的例子

    CREATE TABLE t1(
        t TEXT,
        nu NUMERIC,
        i INTEGER,
        no BLOB
    );

    -- Storage classes for the following row:
    -- TEXT, REAL, INTEGER, TEXT
    INSERT INTO t1 VALUES('500.0', '500.0', '500.0', '500.0');

    -- Storage classes for the following row:
    -- TEXT, REAL, INTEGER, REAL
    INSERT INTO t1 VALUES(500.0, 500.0, 500.0, 500.0);

3. 比较表达式

像SQLite2.0版一样,3.0版的一个特性是二进制比较符'=', '<', '<=', '>=' and '!=', 一个操作'IN'可以测试固定的成员资格, 三重的比较操作

符'BETWEEN'.
比较的结果决定于被比较的两个值的存储类型。遵循以下规则:

一个具有空存储类型的值被认为小于任何值(包括另外一个具有空存储类型的值)。
一个整数值或实数值小于任何文本值和BLOB值。 当一个整数或实数和另一个整数或实数相比较的时候,则按照实际数值来比较。
一个文本值小于BLOB值。当两个文本值相比较的时候,则用C语言类库中的memcmp()函数来比较。 然而,有时候也不是这样的,比如在下面所描述

的“用户定义的整理顺序”情况下。
当两个BLOB文本被比较的时候,结果决定于memcmp()函数。
在开始比较前,SQLite尝试着把值在数字存储级(整数和实数)和文本之间相互转换。下面列举了关于如何比较二进制值的例子。在着重号below中

使用的表达式可以表示SQL标量表达式或是文本但不是一个列值。

当一个列值被比拟为表达式结果的时候,在比较开始前,列的亲和性将被应用在表达结果中。
当两个列值比较的时候,如果一个列有整数或数字亲和性的时候,而另外一列却没有, 那么数字亲和性适用于从非数字列提取的任何具有文本存储

类型的值. P>
当比较两个表达式的结果时,不发生任何转换,直接比较结果.如果一个字符串和一个数字比较, 数字总是小于字符串.
在SQLite中, 表达式"a BETWEEN b AND c"等于表达式 "a >= b AND a <= c",在比较表达式时,a可以是具有任何亲和性.

表达式 "a IN (SELECT b ....)" 在比较时遵循上面所提到的三条规则,是二进制比较.(例如, 在一个相似的样式 "a = b"). 例如,如果'b'是一个

列值, 'a' 是一个表达式,那么,在开始比较前,'b'的亲和性就被转换为'a'的亲和性了.

SQLite把表达式 "a IN (x, y, z)" 和 "a = z OR a = y OR a = z"视为相等.

3.1 比较例子

    CREATE TABLE t1(
        a TEXT,
        b NUMERIC,
        c BLOB
    );

    -- Storage classes for the following row:
    -- TEXT, REAL, TEXT
    INSERT INTO t1 VALUES('500', '500', '500');

    -- 60 and 40 are converted to '60' and '40' and values are compared as TEX
T.
    SELECT a < 60, a < 40 FROM t1;
    1|0

    -- Comparisons are numeric. No conversions are required.
    SELECT b < 60, b < 600 FROM t1;
    0|1

    -- Both 60 and 600 (storage class NUMERIC) are less than '500'
    -- (storage class TEXT).
    SELECT c < 60, c < 600 FROM t1;
    0|0

4. 运算符

所有的数学运算符(所有的运算符而不是连锁作用标记符"||")运算对象首先具有数字亲和性, 如果一个或是两个都不能被转换为数字那么操作的结

果将是空值。
对于连接作用操作符,所有操作符将首先具有文本亲和性。如果其中任何一个操作符不能被转换为文本 (因为它是空值或是BLOB)连接作用操作符

将是空值。

5. 分类,排序,混合挑选

当用子句ORDER挑选值时,空值首先被挑选出来, 然后是整数和实数按顺序被挑选出来, 然后是文本值按memcmp()顺序被挑选出来, 最后是BLOB值按

memcmp()顺序被挑选出来. 在挑选之前, 没有存储类型的值都被转换了.
When grouping values with the 当用GROUP BY子句给值分组时,具有不同存储类型的值被认为是不同的, 但也有例外, 比如,一个整数值和一个实

数值从数字角度来说是相等的,那么它们则是相等的. 用GROUP by 子句比较完后,值不具有任何亲和性.

混合挑选操作符UNION, INTERSECT and EXCEPT 在值之间实行绝对的比较,同样的亲和性将被应用于所有的值, 这些值将被存储在一个单独的具有混

合SELECT的结果组的列中. 被赋予的亲和性是该列的亲和性, 这个亲和性是由剩下的大部分的混合SELECTS返回的,这些混合SELECTS在那个位置上有

列值(而不是其它类型的表达式). 如果一个给定的混合SELECT列没有SELECTS的量, 那么在比较前,该列的值将不具有任何亲和性.

6. 其它亲和性模式

以上的部分所描述的都是数据库引擎在正常亲和性模式下所进行的操作, SQLite将描述其它两种亲和性模式,如下:

严格亲和性模式.在这种模式下,如果需要值之间相互转换数据存储类型的话,数据库引擎将发送错误报告,当前语句也将会重新运行.
无亲和性模式.在这种模式下,值的数据存储类型不发生转换.具有不同存储类型的值之间不能比较,但整数和实数之间可以比较.
7.用户定义的校对顺序
By default, when 当SQLite比较两个文本值的时候,通过系统设定,不管字符串的编码是什么,用memcmp()来比较. SQLite第三版允许用户提供任意

的函数来代替memcmp(),也就是用户定义的比较顺序.
除了系统预设的BINARY比较顺序,它是用memcmp()函数比较,SQLite还包含了两个额外的内置比较顺序函数, NOCASE和REVERSE:


BINARY -使用memcmp()比较字符串数据, 不考虑文本编码.
NOCASE - 和二进制一样,但在比较之前,26位的大写字母盘要被折合成相应的小写字母盘.

7.1 分配比较顺序
每个表格中的每个列都有一个预设的比较类型.如果一个比较类型不是二进制所要求的, 比较的子句将被具体化为 列的定义 来定义该列.
当用SQLite比较两个文本值时,比较顺序将按照以下的规则来决定比较的结果. 文档的第三部分和第五部分描述在何种场合下发生这种比较.

对于二进制比较符(=, <, >, <= and >=),如果每个操作数是一列的话, 那么该列的默认比较类型决定于所使用的比较顺序. 如果两个操作数都是列

的话,那么左边的操作数的比较类
型决定了所要使用的比较顺序.如果两个操作数都不是一列, 将使用二进制来比较.

表达式"x BETWEEN y and z"和 "x >= y AND x <= z"是相同的. 表达式"x IN (SELECT y ...)" 和表达式 "x = y" 使用同样的方法来操作,这是为

了决定所要使用的比较顺序.如果X是一列或者二进制的,则"x IN (y, z ...)" 形式的表达式所使用的比较顺序是X的默认的比较类型.

ORDER BY clause that is part of a SELECT statement may be assigned a collation sequence to be used for the sort operation

explicitly. In this case the explicit collation sequence is always used. Otherwise, if the expression sorted by an ORDER BY

clause is a column, then the default collation type of the column is used to determine sort order. If the expression is not a

column, then the BINARY collation sequence is used.

7.2 比较顺序的例子

下面的例子介绍了The examples below identify the collation sequences that would be used to determine the results of text

comparisons that may be performed by various SQL statements. Note that a text comparison may not be required, and no collation

sequence used, in the case of numeric, blob or NULL values.

    CREATE TABLE t1(
        a,                 -- default collation type BINARY
        b COLLATE BINARY, -- default collation type BINARY
        c COLLATE REVERSE, -- default collation type REVERSE
        d COLLATE NOCASE   -- default collation type NOCASE
    );

    -- Text comparison is performed using the BINARY collation sequence.
    SELECT (a = b) FROM t1;

    -- Text comparison is performed using the NOCASE collation sequence.
    SELECT (d = a) FROM t1;

    -- Text comparison is performed using the BINARY collation sequence.
    SELECT (a = d) FROM t1;

    -- Text comparison is performed using the REVERSE collation sequence.
    SELECT ('abc' = c) FROM t1;

    -- Text comparison is performed using the REVERSE collation sequence.
    SELECT (c = 'abc') FROM t1;

    -- Grouping is performed using the NOCASE collation sequence (i.e. values

    -- 'abc' and 'ABC' are placed in the same group).
    SELECT count(*) GROUP BY d FROM t1;

    -- Grouping is performed using the BINARY collation sequence.
    SELECT count(*) GROUP BY (d || '') FROM t1;

    -- Sorting is performed using the REVERSE collation sequence.
    SELECT * FROM t1 ORDER BY c;

    -- Sorting is performed using the BINARY collation sequence.
    SELECT * FROM t1 ORDER BY (c || '');

    -- Sorting is performed using the NOCASE collation sequence.
    SELECT * FROM t1 ORDER BY c COLLATE NOCASE;


分享到:
评论
1 楼 zean 2011-03-10  
还是以前做flex桌面应用时用过sqlLite,flex唯一支持的数据库
不过有那么多工具,为什么还用命令,多麻烦.

相关推荐

    sqlite3学习工具

    这个“sqlite3学习工具”包含了对SQLite3的全面介绍,旨在帮助新手快速掌握这一强大的数据库系统。 首先,SQLite3的安装非常简单。在大多数Linux发行版中,可以通过包管理器如`apt`或`yum`来安装。在Windows和macOS...

    SQLite3C++

    SQLite3是一款轻量级的开源数据库管理系统,它以C语言编写,可以嵌入到各种应用程序中,无需单独的服务器进程。在本主题中,我们关注的是SQLite3与C++的结合,即如何在C++程序中使用SQLite3进行数据存储和检索。 1....

    SQLite使用学习笔记

    "SQLite学习笔记之一.docx"可能详细介绍了如何创建数据库和表。在SQLite中,你可以使用CREATE DATABASE语句创建数据库,然后使用CREATE TABLE语句定义表的结构,包括字段名、数据类型和约束条件。例如,创建一个名为...

    SQLite3 使用实例

    SQLite3 是一款轻量级的关系型数据库管理系统,它被广泛应用于嵌入式系统、移动应用以及需要快速存储和检索数据的项目中。由于其体积小、无服务器模式、支持多种编程语言,SQLite3 成为了开发者首选的本地数据库解决...

    sqlite3的ORM框架

    C++中的SQLite3 ORM框架通常通过创建类来代表数据库表,每个类的实例对应表中的一条记录。类的成员变量对应于表的列,而类的方法则提供了对数据库的操作,如插入、查询、更新和删除等。这些操作通常由ORM框架自动...

    sqlite3和命令大全

    总的来说,这个压缩包提供了一个全面的SQLite3环境,无论是对数据库的日常管理,还是对SQLite3的深入学习和开发,都十分有用。如果你需要处理小规模的数据存储,或者在没有服务器支持的情况下工作,SQLite3是一个...

    Node.js-better-sqlite3是Node.js中最快和最简单的SQLite3库

    "Node.js-better-sqlite3是Node.js中最快和最简单的SQLite3库" 这个标题表明我们关注的是一个名为`better-sqlite3`的库,它是针对Node.js平台的SQLite3数据库接口。这个库以其速度和易用性著称,适合在Node.js环境中...

    SQLite3简单demo

    通过深入研究`Sqlite3demo`项目,学习者不仅可以理解SQLite3的基本操作,还可以了解到如何在Delphi环境中实现这些操作,这对于进一步的数据库开发是非常有价值的。对于初学者来说,这是一个很好的起点,可以为进一步...

    delphi封装的sqlite3类

    本文将深入探讨Delphi环境下对SQLite3的封装,以SQLite3.pas和SQLiteTable3.pas两个关键组件为例,解析如何在Delphi项目中使用SQLite数据库。 首先,`SQLite3.pas`是Delphi中用于与SQLite3交互的核心组件,它包含了...

    基于标准库的C++ sqlite3常用功能封装和使用

    在C++编程中,SQLite是一个轻量级的嵌入式数据库引擎,广泛...`sqlite3_demo`这个文件可能包含了上述功能的实现,你可以参考学习。通过这种方式,你可以更高效地管理和操作SQLite数据库,而无需深入理解底层的API细节。

    sqlite3.rar

    学习和理解这些基本操作对于掌握SQLite3数据库编程至关重要。在实际项目中,开发者可能还需要处理错误,优化查询性能,或者使用事务确保数据一致性。此外,SQLite3还提供了诸如备份、恢复、事务、索引等功能,以满足...

    支持VB的sqlite3,可加密码修改密码带odbc。附中文资料大全

    SQLite3是一种轻量级、开源的嵌入式数据库系统,广泛应用于各种软件开发项目中,尤其是对于需要在本地存储数据的应用。VB(Visual Basic)是微软开发的一种编程语言,它支持与SQLite3的交互,使得开发者可以利用...

    SQLiteStudio_sqlite3_源码

    通过学习和研究 SQLite3 的源码,开发者可以理解其内存管理、事务处理、查询解析和优化等核心机制,这对于深入理解和优化数据库应用非常有帮助。而 SQLiteStudio 则提供了一个实用的工具,使得这些操作变得更加直观...

    sqlite3使用大全

    TEMPORARY 表不会记录在 `sqlite_master` 中,而是存储在 `sqlite_temp_master` 表中,只对当前会话可见,且在会话结束时自动删除。 6. **点命令**: 点命令是 SQLite3 提供的特殊功能,以点(.)开头,如 `.help...

    sqlite3源代码

    5. **错误处理与日志记录**:观察SQLite3如何处理异常情况并记录相关信息。 总之,这份SQLite3源代码和移植指南提供了深入理解数据库系统内部运作、优化和定制的宝贵资料。无论是为了学术研究、软件开发还是学习...

    自制demo~ 在symbian3 SDK下测试连接SQLite3数据库~

    2. **执行SQL语句**:使用`sqlite3_exec()`函数执行SQL命令,如创建表、插入数据、更新或查询记录。记得每次执行完SQL后检查返回值,确保操作成功。 3. **预编译语句(Prepared Statements)**:对于频繁执行的SQL...

    Ruby-SQLite3Ruby绑定SQLite3嵌入式数据库

    无论是在学习基础的数据库操作,还是在构建小型应用,甚至是进行原型开发,Ruby-SQLite3都是一个理想的选择。通过深入理解其API和工作原理,开发者能够更好地利用这个库来提升开发效率和项目的可维护性。

    基于sqlite3的在线电子词典

    【基于sqlite3的在线电子词典】是一款专为学习者设计的应用程序,它利用SQLite3数据库管理系统来存储和管理词汇信息。SQLite3是一种轻量级的、文件式的数据库引擎,适用于那些需要在本地进行数据存储的项目,尤其...

    sqlite3使用总结

    SQLite3是一种轻量级、自包含的数据库管理系统,广泛应用于嵌入式系统和移动应用中。它无需独立服务器进程,可以直接在应用程序中进行...通过学习和实践,你可以熟练掌握SQLite3,并在各种项目中有效利用它的功能。

Global site tag (gtag.js) - Google Analytics