SQLite3笔记

 

SQLite3笔记 

一:数据库的数据结构 

 
 

    存储类 描述 

    NULL    值是一个 NULL 值。 

    INTEGER 值是一个带符号的整数,根据值的大小存储在 1、2、3、4、6 或 8 字节中 

    REAL    值是一个浮点值,存储为 8 字节的 IEEE 浮点数字 

    TEXT    值是一个文本字符串,使用数据库编码(UTF-8、UTF-16BE 或 UTF-16LE)存储。 

    BLOB    值是一个 blob 数据,完全根据它的输入存储 

    SQLite 的存储类稍微比数据类型更普遍。INTEGER 存储类,例如,包含 6 种不同的不同长度的整数数据类型 

 
 

Date 与 Time 数据类型 

    存储类 日期格式 

    TEXT    格式为 "YYYY-MM-DD HH:MM:SS.SSS" 的日期 

    REAL    从公元前 4714 年 11 月 24 日格林尼治时间的正午开始算起的天数 

    INTEGER 从 1970-01-01 00:00:00 UTC 算起的秒数 

    Boolean 数据类型 

    SQLite 没有单独的 Boolean 存储类。相反,布尔值被存储为整数 0(false)和 1(true)。 

 
 

 
 

二:数据库的创建 

 
 

//创建数据库 

$ sqlite3 DatabaseName.db 

 
 

//一旦数据库被创建,您就可以使用 SQLite 的 .databases 命令来检查它是否在数据库列表中 

 sqlite>.databases 

 
 

//退出数据库 

 sqlite>.quit 

 
 

//命令提示符中使用 SQLite .dump 点命令来导出完整的数据库在一个文本文件中 

$ sqlite3 testDB.db .dump > testDB.sql 

 
 

//上面的命令将转换整个 testDB.db 数据库的内容到 SQLite 的语句中,并将其转储到 ASCII 文本文件 testDB.sql 中。您可以通过简单的方式从生成的 testDB.sql 恢复 

$ sqlite3 testDB.db < testDB.sql 

 
 

//附加数据库的命令  如果数据库尚未被创建,上面的命令将创建一个数据库,如果数据库已存在,则把数据库文件名称与逻辑数据库 'Alias-Name' 绑定在一起。 main和temp是SQLite3的保留的name 

sqlite> ATTACH DATABASE 'DatabaseName' As 'Alias-Name'; 

sqlite> DETACH DATABASE 'currentDB'; 

eg: 

sqlite>.databases 

seq  name             file 

---  ---------------  ---------------------- 

0    main             /home/sqlite/testDB.db 

2    test             /home/sqlite/testDB.db 

3    currentDB        /home/sqlite/testDB.db 

 
 

//SQLite的 DETACH DTABASE 语句是用来把命名数据库从一个数据库连接分离和游离出来,连接是之前使用 ATTACH 语句附加的。如果同一个数据库文件已经被附加上多个别名,DETACH 命令将只断开给定名称的连接,而其余的仍然有效。您无法分离 main 或 temp 数据库。 'Alias-Name' 与您之前使用 ATTACH 语句附加数据库时所用到的别名相同 

DETACH DATABASE 'Alias-Name'; 

 
 

三:表的操作 

//新建表 

CREATE TABLE database_name.table_name( 

   column1 datatype  PRIMARY KEY(one or more columns), 

   column2 datatype, 

   column3 datatype, 

   ..... 

   columnN datatype, 

); 

 
 

eg: 

sqlite> CREATE TABLE COMPANY( 

   ID INT PRIMARY KEY     NOT NULL, 

   NAME           TEXT    NOT NULL, 

   AGE            INT     NOT NULL, 

   ADDRESS        CHAR(50), 

   SALARY         REAL 

); 

//您可以使用 SQLIte 命令中的 .tables 命令来验证表是否已成功创建,该命令用于列出附加数据库中的所有表 

sqlite>.tables 

 
 

//可以使用 SQLite .schema 命令得到表的完整信息 

sqlite>.schema COMPANY 

 
 

//删除表  删除之前要先确定表存在 使用 .table 

DROP TABLE database_name.table_name; 

 
 

//插入数据 column1, column2,...columnN 是要插入数据的表中的列的名称 

INSERT INTO TABLE_NAME [(column1, column2, column3,...columnN)]   

VALUES (value1, value2, value3,...valueN); 

如果要为表中的所有列添加值,您也可以不需要在 SQLite 查询中指定列名称。但要确保值的顺序与列在表中的顺序一致。SQLite 的 INSERT INTO 语法如下 

INSERT INTO TABLE_NAME VALUES (value1,value2,value3,...valueN); 

 
 

//Select语句 column1, column2...是表的字段,他们的值即是您要获取的 

SELECT column1, column2, columnN FROM table_name; 

如果您想获取所有可用的字段 

SELECT * FROM table_name; 

 
 

//设置输出列的宽度 

sqlite>.width 10, 20, 10 

 
 

Schema 信息 

sqlite> SELECT tbl_name FROM sqlite_master WHERE type = 'table'; 

 
 

列出关于 COMPANY 表的完整信息 

sqlite> SELECT sql FROM sqlite_master WHERE type = 'table' AND tbl_name = 'COMPANY'; 

 
 

四:逻辑运算符 

 
 

运算符     描述 

AND AND     运算符允许在一个 SQL 语句的 WHERE 子句中的多个条件的存在 

BETWEEN     BETWEEN 运算符用于在给定最小值和最大值范围内的一系列值中搜索值 

EXISTS      EXISTS 运算符用于在满足一定条件的指定表中搜索行的存在 

IN  IN      运算符用于把某个值与一系列指定列表的值进行比较 

NOT IN      IN 运算符的对立面,用于把某个值与不在一系列指定列表的值进行比较 

LIKE        LIKE 运算符用于把某个值与使用通配符运算符的相似值进行比较 

GLOB        GLOB 运算符用于把某个值与使用通配符运算符的相似值进行比较。GLOB 与 LIKE 不同之处在于,它是大小写敏感的 

NOT         NOT 运算符是所用的逻辑运算符的对立面。比如 NOT EXISTS、NOT BETWEEN、NOT IN,等等。它是否定运算符 

OR          OR 运算符用于结合一个 SQL 语句的 WHERE 子句中的多个条件 

IS NULL     NULL 运算符用于把某个值与 NULL 值进行比较 

IS          IS 运算符与 = 相似 

IS NOT      IS NOT 运算符与 != 相似 

||          连接两个不同的字符串,得到一个新的字符串 

UNIQUE      UNIQUE 运算符搜索指定表中的每一行,确保唯一性(无重复)。 

 
 

 
 

运算符   描述                                                   实例 

==      检查两个操作数的值是否相等,如果相等则条件为真。            (a == b) 不为真 

=       检查两个操作数的值是否相等,如果相等则条件为真。            (a = b) 不为真 

!=      检查两个操作数的值是否相等,如果不相等则条件为真。           (a != b) 为真 

<>      检查两个操作数的值是否相等,如果不相等则条件为真。           (a <> b) 为真 

>       检查左操作数的值是否大于右操作数的值,如果是则条件为真。        (a > b) 不为真 

<       检查左操作数的值是否小于右操作数的值,如果是则条件为真。        (a < b) 为真 

>=      检查左操作数的值是否大于等于右操作数的值,如果是则条件为真。      (a >= b) 不为真 

<=      检查左操作数的值是否小于等于右操作数的值,如果是则条件为真。      (a <= b) 为真 

!<      检查左操作数的值是否不小于右操作数的值,如果是则条件为真。       (a !< b) 为假 

!>      检查左操作数的值是否不大于右操作数的值,如果是则条件为真。       (a !> b) 为真 

 
 

 
 

运算符 描述                              实例 

&       如果同时存在于两个操作数中,二进制 AND 运算符复制一位到结果中。  (A & B) 将得到 12,即为 0000 1100 

|       如果存在于任一操作数中,二进制 OR 运算符复制一位到结果中。     (A | B) 将得到 61,即为 0011 1101 

~       二进制补码运算符是一元运算符,具有"翻转"位效应,即0变成1,1变成0。    (~A ) 将得到 -61,即为 1100 0011,一个有符号二进制数的补码形式。 

<<      二进制左移运算符。左操作数的值向左移动右操作数指定的位数。       A << 2 将得到 240,即为 1111 0000 

>>      二进制右移运算符。左操作数的值向右移动右操作数指定的位数。       A >> 2 将得到 15,即为 0000 1111 

 
 

 
 

//比较运算符的作用   

sqlite> SELECT * FROM 表名 WHERE 字段 > 50000; 

 
 

sqlite> SELECT * FROM COMPANY WHERE AGE >= 25 OR SALARY >= 65000; 

> SELECT * FROM COMPANY WHERE AGE >= 25 OR SALARY >= 65000; 

 
 

 
 

 
 

 

 

posted @ 2017-09-14 11:44  Quintinz  阅读(276)  评论(0编辑  收藏  举报