创建数据库 sql的指令格式 创建表 数据类型 统会设为 p=5; s=0 。
插入记录 查询 删除 改变输出格式 .mode list|column|insert|line|tabs|tcl|csv 更改输出
1.存储类别 第二版把所有列的值都存储成ASCII文本格式。第三版则可以把数据存储成整数和实数,还可以存储BLOB数据. Each value stored in an sqlite数据库中存储的每个值都有一个属性,都属于下面所列类中的一种,(被数据库引擎所控制) NULL: 这个值为空值 像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 一个具有类型亲和性的列按照无类型,文本,或BLOB存储所有的数据.如果数字数据被插入一个 具有文本类型亲和性的列,在存储之前数字将被转换成 文本. 一个具有数字类型亲和性的列也许使用所有的五个存储类型存储值.当文本数据被插入一个数字列时,在存储之前,数据库将尝试着把文本转换成整 数或实数.如果能成功转换的话,值将按证书活实数的类型被存储. 如果不能成功转换的话,值则只能按文本类型存储了,而不会被转换成无类型或 BLOB类型来存储. 一个具有整数亲和力的列在转换方面和具有数字亲和力的列是一样的,但也有些区别,比如没有浮动量的实值(文本值转换的值)被插入具有整数亲 和力的列时,它将被转换成整数并按整数类型存储. 一个具有无类型亲和力的列不会优先选择使用哪个类型.在数据被输入前它不会强迫数据转换类型. 2.1 列的亲和性的决定 一个列的亲和类型是由该列所宣称的类型决定的.遵守以下规则: a. 如果数据类型包括字符串"INT"那么它被定义成具有整数亲和性. 因此也具有文本类型亲和性. 如果表格使用If "CREATE TABLE AS SELECT..."语句生成的,那么所有的列则都没有具体的数据类型,则没有类型亲和性. 2.2 列的亲和性的例子 CREATE TABLE t1( -- Storage classes for the following row: -- Storage classes for the following row: 3. 比较表达式 像sqlite2.0版一样,3.0版的一个特性是二进制比较符'=','<','<=','>=' and '!=',一个操作'IN'可以测试固定的成员资格,三重的比较操作 符'BETWEEN'. 一个具有空存储类型的值被认为小于任何值(包括另外一个具有空存储类型的值)。 的“用户定义的整理顺序”情况下。 使用的表达式可以表示sql标量表达式或是文本但不是一个列值。 当一个列值被比拟为表达式结果的时候,在比较开始前,列的亲和性将被应用在表达结果中。 类型的值. P> 表达式 "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( -- Storage classes for the following row: -- 60 and 40 are converted to '60' and '40' and values are compared as TEX -- Comparisons are numeric. No conversions are required. -- Both 60 and 600 (storage class NUMERIC) are less than '500' 4. 运算符 所有的数学运算符(所有的运算符而不是连锁作用标记符"||")运算对象首先具有数字亲和性,如果一个或是两个都不能被转换为数字那么操作的结 果将是空值。 将是空值。 5. 分类,排序,混合挑选 当用子句ORDER挑选值时,空值首先被挑选出来,然后是整数和实数按顺序被挑选出来,然后是文本值按memcmp()顺序被挑选出来,最后是BLOB值按 memcmp()顺序被挑选出来. 在挑选之前,没有存储类型的值都被转换了. 数值从数字角度来说是相等的,那么它们则是相等的. 用GROUP by 子句比较完后,值不具有任何亲和性. 混合挑选操作符UNION,INTERSECT and EXCEPT 在值之间实行绝对的比较,同样的亲和性将被应用于所有的值,这些值将被存储在一个单独的具有混 合SELECT的结果组的列中. 被赋予的亲和性是该列的亲和性,这个亲和性是由剩下的大部分的混合SELECTS返回的,这些混合SELECTS在那个位置上有 列值(而不是其它类型的表达式). 如果一个给定的混合SELECT列没有SELECTS的量,那么在比较前,该列的值将不具有任何亲和性. 6. 其它亲和性模式 以上的部分所描述的都是数据库引擎在正常亲和性模式下所进行的操作,sqlite将描述其它两种亲和性模式,如下: 严格亲和性模式.在这种模式下,如果需要值之间相互转换数据存储类型的话,数据库引擎将发送错误报告,当前语句也将会重新运行. 的函数来代替memcmp(),也就是用户定义的比较顺序.
7.1 分配比较顺序 对于二进制比较符(=,<,>,<= 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( -- Text comparison is performed using the BINARY collation sequence. -- Text comparison is performed using the NOCASE collation sequence. -- Text comparison is performed using the BINARY collation sequence. -- Text comparison is performed using the REVERSE collation sequence. -- Text comparison is performed using the REVERSE collation sequence. -- Grouping is performed using the NOCASE collation sequence (i.e. values -- 'abc' and 'ABC' are placed in the same group). -- Grouping is performed using the BINARY collation sequence. -- Sorting is performed using the REVERSE collation sequence. -- Sorting is performed using the BINARY collation sequence. -- Sorting is performed using the NOCASE collation sequence. |