sqlite数据库
一、Sqlite简介
Sqlite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库不一样,您不需要在系统中配置。就像其他数据库,SQLite 引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite 直接访问其存储文件。
二、Sqlite安装
零配置,意味着不需要复杂的安装或管理。
1、在windows上安装
-
访问 SQLite 下载页面,从 Windows 区下载预编译的二进制文件。
-
下载 sqlite-tools-win32-*.zip 和 sqlite-dll-win32-*.zip 压缩文件。
-
创建文件夹 C:\sqlite,并在此文件夹下解压上面两个压缩文件,将得到 sqlite3.def、sqlite3.dll 和 sqlite3.exe 文件。
-
添加 C:\sqlite 到 PATH 环境变量,最后在命令提示符下,使用 sqlite3 命令,将显示如下结果。
2、在linux上安装
几乎所有版本的 Linux 操作系统都附带 SQLite。所以,只要使用下面的命令来检查您的机器上是否已经安装了 SQLite。
$ sqlite3
SQLite version 3.7.15.2 2013-01-09 11:53:05
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite>
如果没有安装,请访问 SQLite 下载页面,从源代码区下载 sqlite-autoconf-*.tar.gz。
三、Sqlite创建数据库、创建表、删除表、常用命令
1、SQlite创建数据库
sqlite3 命令的基本语法:跳转到想要创建数据库的目录下执行 :$ sqlite3 test.db 或跳转到创建目录下执行 sqlite3进入sqlite指令模式,再使用 .open test.db 创建。
打开已存在数据库也是用 .open 命令,以上命令如果 test.db 存在则直接会打开,不存在就创建它,可用 .databases 查看创建数据库的路径。
a、windows下创建数据库练习(需要安装sqlite)
注意:笔者在使用如上方法,使用命令:sqlite3 test2.db 之后在该目录下并 没有生成test.db 文件,而是再使用命令 .databases查看 后 test.db才显示 出来,而使用 .open 创建的立马显示。
如需放到sqlite安装目录下可以跳转目录:windows命令切换磁盘:如D盘,输入D: 回车即可,切换二级目录也可使用cd指令,查看目录下文件使用 dir 指令。退出使用 .quit 或 .exit 。
新建的数据库大小为0KB。
2、创建表
SQLite 的 CREATE TABLE 语句用于在任何给定的数据库创建一个新表。创建基本表,涉及到命名表、定义列及每一列的数据类型。
实例:创建一个 COMPANY 表,ID 作为主键,NOT NULL 作为约束:
CREATE TABLE COMPANY(
ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL
TIMES REAL
);
查看数据库所有表名
sqlite> select name from sqlite_master where type='table' order by name;
查看某张表的所有字段 (可添加格式输出)
sqlite> pragma table_info([ 表名 ]);
3、格式化输出
可以使用下列的点命令来格式化输出如下所列格式,设置后如下图:
sqlite>.header on 后面如需关闭:off
sqlite>.mode column
sqlite>.timer on 后面如需关闭:off
4、删除表
DROP TABLE 语句用来删除表定义及其所有相关数据、索引、触发器、约束和该表的权限规范。一旦删除,信息将永远丢失。
语法:DROP TABLE + 表名;
5、常用命令
a.在linux下键入一个简单的 sqlite3 命令,在 SQLite 命令提示符下,您可以使用各种 SQLite 命令。
# sqlite3
sqlite>
sqlite>.help
如上可获取所有点命令的清单。
b、可使用 SQLIte 命令中的 .tables 命令来验证表是否已成功创建表,该命令用于列出附加数据库中的所有表,如果没有创建则不会显示。
sqlite>.tables COMPANY DEPARTMENT
c、退出命令
如果我们使用 .exit 和 .quit 都不能退出时,可使用 CTRL + Z
四、Sqlite运算符
1、Sqlite比较运算符
2、Sqlite逻辑运算符
3、Sqlite位运算符
五、Sqlite表达式
1、Sqlite常用函数
2、Sqlite数值表达式
这些表达式用来执行查询中的任何数学运算。语法如下:
select numerical_expression as OPERATION_NAME [from table_name WHERE CONDITION]
在这里,numerical_expression 用于数学表达式或任何公式。下面的实例演示了 SQLite 数值表达式的用法:
SELECT (10 + 15) AS num
num = 25
有几个内置的函数,比如 avg()、sum()、count(),等等,执行被称为对一个表或一个特定的表列的汇总数据计算。
3、Sqlite日期表达式
用于返回当前系统日期和时间值,这些表达式将被用于各种数据操作。
select CURRENT_TIMESTAMP
六、Sqlite运算符、语句、子句
1、AND运算符
AND运算符用于判断多个条件的存在。使用 AND 运算符时,只有当所有条件都为真(true)时,整个条件为真(true)。
2、OR运算符
OR运算符也适用于多个条件。使用 OR 运算符时,只要当条件中任何一个为真(true)时,整个条件为真(true)。
3、Insert语句
INSERT INTO 语句用于向数据库的某个表中添加新的数据行。有两种语法。
a、语法一:
使用语法一创建一条记录:INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (1, 'Paul', 32, 'California', 20000.00 );
b、语法二:
也可以使用第二种语法在 COMPANY 表中创建一个记录:INSERT INTO COMPANY VALUES (7, 'James', 24, 'Houston', 10000.00 );
4、Select语句
语法:SELECT 字段1,字段2,字段N.... FROM 表名;如果想要获取所有字段,语法为:SELECT * FROM 表名;
5、Update语句
用于修改表中已有的记录。可以使用带有 WHERE 子句限制,否则所有的行都会被更新。
语法(可使用 AND 或 OR 运算符来结合 N 个数量的条件):
实例:更新 ID 为 5 的客户地址:UPDATE COMPANY SET ADDRESS = 'Texas' WHERE ID = 5;
更新表中所有 ADDRESS 和 SALARY 列的值:UPDATE COMPANY SET ADDRESS = 'Texas' ,SALARY = 20000.00;
6、Delete语句
用于删除表中已有的记录。可以使用带有 WHERE 子句限制,否则所有的记录都会被删除。
语法(可使用 AND 或 OR 运算符来结合 N 个数量的条件):
实例:删除 ID 为 5 的客户:DELETE FROM COMPANY WHERE ID = 5;
删除表中所有记录:DELETE FROM COMPANY;
7、Like子句(不区分大小写)
用来匹配通配符指定模式的文本值。如果搜索表达式与模式表达式匹配,LIKE 运算符将返回true。这里有两个通配符与 LIKE 运算符一起使用:
-
-
百分号 (%)
-
下划线 (_)
-
下面一些实例演示了 带有 '%' 和 '_' 运算符的 LIKE 子句不同的地方:
8、Glob子句(区分大小写)
与Like的使用一致,不同的是通配符不一致,Like不区分大小写,GLOB 是大小写敏感的,对于下面的通配符,它遵循 UNIX 的语法。
-
-
星号 (*)
-
问号 (?)
-
星号(*)代表零个、一个或多个数字或字符。问号(?)代表一个单一的数字或字符。这些符号可以被组合使用。
下面一些实例演示了 带有 '*' 和 '?' 运算符的 GLOB 子句不同的地方:
9、Where子句
跟在语句后面筛选条件。不仅可以用于select语句,也可以用于update,delete语句等;可以使用比较或逻辑运算符指定条件,如 >、>=、<、<=、=、!=、LIKE、NOT,BETWEEN 等。
语法:select * from COMPANY where ID=2;选择ID=2时不能复合使用AND ID=3这种语法;
a、select * from COMPANY where TIMES NOT NULL: 列出TIMES不为空的所有记录。
b、select * from COMPANY where AGE NOT IN (25, 27): 列出 AGE 既不是 25 也不是 27 的所有记录,相反如果没有NOT则是列出AGE中所有包含25,27的记录。
c、select * from COMPANY where NAME LIKE 'Da%': 列出NAME以Da开头的所有记录,也可以是一个或多个字符,注意符号为单引号,%号为通配符。
d、select * from COMPANY where AGE BETWEEN 25 AND 27: 列出了 AGE 的值在 25 与 27 之间(包含25和27)的所有记录。
e、select * from COMPANY where AGE > (select AGE from COMPANY where SALARY > 65000):子查询查找 SALARY > 65000 的带有 AGE 字段的所有记录(27),外查询列出 AGE 大于子查询返回结果中的年龄的所有记录,即(AGE>27)的所有记录。
10、Limit子句
用于限制由 SELECT 语句返回的数据数量。
下面是一个实例,它限制了您想要从表中提取的行数:
在某些情况下,可能需要从一个特定的偏移开始提取记录。下面是一个实例,从第三位开始提取 3 个记录:
七、Sqlite约束
约束是在表的数据列上强制执行的规则。用来限制插入到表中的数据类型。这确保了数据库中数据的准确性和可靠性。约束可以是列级或表级。列级适用于列,表级适用于整个表。
常用约束:
-
NOT NULL 约束:确保某列不能有 NULL 值。
-
DEFAULT 约束:当某列没有指定值时,为该列提供默认值。
-
UNIQUE 约束:确保某列中的所有值是不同的。
-
PRIMARY Key 约束:唯一标识数据库表中的各行/记录。
-
CHECK 约束:CHECK 约束确保某列中的所有值满足一定条件。