sqlite 是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 sql 数据库引擎。sqlite 是在世界上最广泛部署的 sql 数据库引擎。sqlite 源代码不受版权限制。
可以到网上下载sqlite的dll和exe。
解压后我们可以得到
可以将sqlite3添加到path中,这样就可以直接在CMD中运行。
下面开始学习一些语法。有个重要的点值得注意,sqlite 是不区分大小写的,但也有一些命令是大小写敏感的,比如 GLOB 和 glob 在 sqlite 的语句中有不同的含义。
首先创建一个数据库
sqlite3 DatabaseName.db
这里创建一个测试的数据库test.db
sqlite3 test.db
查看是否创建好了
.databases
接着我们在这个数据库中创建一个表
CREATE TABLE database_name.table_name( column1 datatype PRIMARY KEY(one or more columns),column2 datatype,column3 datatype,..... columnN datatype,);
这里需要输入很多内容,如果在命令行中输入很容易输入错误。我们可以建立一个test.sql文件,在这个文件中输入命令,然后将命令读入。注意将test.sql与test.db放在一起.test.sql内容为
CREATE TABLE COMPANY( ID INT PRIMARY KEY NOT NULL,NAME TEXT NOT NULL,AGE INT NOT NULL,ADDRESS CHAR(50),SALARY REAL );
CREATE TABLE DEPARTMENT( ID INT PRIMARY KEY NOT NULL,DEPT CHAR(50) NOT NULL,EMP_ID INT NOT NULL );
接着我们用.read读取
.read test.sql
用.tables命令来查看是否成功创建这两个表
可以用 .schema来查看表的结构。
表已经创建完成,接着就可以插入数据了。
INSERT INTO TABLE_NAME (column1,column2,column3,...columnN)] VALUES (value1,value2,value3,...valueN);
INSERT INTO TABLE_NAME VALUES (value1,...valueN);
INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1,'Paul',32,'California',20000.00 );
INSERT INTO COMPANY (ID,SALARY) VALUES (2,'Allen',25,'Texas',15000.00 );
INSERT INTO COMPANY (ID,SALARY) VALUES (3,'Teddy',23,'Norway',SALARY) VALUES (4,'Mark','Rich-Mond ',65000.00 );
INSERT INTO COMPANY (ID,SALARY) VALUES (5,'David',27,85000.00 );
INSERT INTO COMPANY VALUES (6,'Kim',22,'South-Hall',45000.00 );
INSERT INTO COMPANY VALUES (7,'James',24,'Houston',10000.00 );
如果某条记录多插入了,比如第七条,此时我们需要删除这条记录
DELETE FROM table_name WHERE [condition];
这里就可以
DELETE FROM COMPANY WHERE ID = 7;
然后.read test.sql,这个时候表内就导入了数据。如果我们想要删除一个表
DROP TABLE database_name.table_name;
我们可以先用.tables来查看数据库中有哪些表,然后DROP TABLE table_name;就可以了。
好了接着来看如何查看表中的数据。使用的SELECT 语句。
SELECT column1,columnN FROM table_name;
columnN就是表中的字段,用*可以返回所有的字段,例如这里
SELECT * FROM COMPANY
输入语句后没有输入结束语句的标识符;,这时就会显示…>让我们接着输入,这里可以直接输入;来结束。
这里可以看到将所有插入的数据所有字段全都返回显示出来,但是都紧挨在一起很不好看,这里我们可以设置mode。首先
.show
查看一下所有的默认配置,我们发现headers是off,这里headers就是字段的名称。mode是list,我们设置成column,width没有设置,我们可以设置也可以不设置。这里格式化为
.headers on
.mode column
然后输入select查询一下
接着是WHERE语句,WHERE相当于if,当数据符合某些条件时就按照select显示出来
SELECT column1,columnN FROM table_name WHERE [condition]
比如这里选择出年纪大于25薪水大于60000的
SELECT * FROM COMPANY WHERE AGE > 25 AND SALARY > 60000;
有时候某个数据的字段我们赋值出错了,想要修改,这时就可以用UPDATE 语句。
UPDATE table_name SET column1 = value1,column2 = value2....,columnN = valueN WHERE [condition];
比如我们需要修改Paul的薪水为80000,地址是中国
UPDATE COMPANY SET ADDRESS = 'China',SALARY=80000 WHERE ID = 1;
我们看到此时已经更正过来了。
有时候我们需要查找某些特定的信息,比如地址是以C开头的,名字是以l结尾的记录,此时就需要匹配,这里可以用Like和GLOB,只介绍GLOB语句
星号(*)代表零个、一个或多个数字或字符。问号(?)代表一个单一的数字或字符。这些符号可以被组合使用。
例如
语句 | 描述 |
---|---|
WHERE SALARY GLOB ‘200*’ | 查找以 200 开头的任意值 |
WHERE SALARY GLOB ‘200’ | 查找任意位置包含 200 的任意值 |
WHERE SALARY GLOB ‘?00*’ | 查找第二位和第三位为 00 的任意值 |
WHERE SALARY GLOB ‘2??’ | 查找以 2 开头,且长度至少为 3 个字符的任意值 |
WHERE SALARY GLOB ‘*2’ | 查找以 2 结尾的任意值 |
WHERE SALARY GLOB ‘?2*3’ | 查找第二位为 2,且以 3 结尾的任意值 |
WHERE SALARY GLOB ‘2???3’ | 查找长度为 5 位数,且以 2 开头以 3 结尾的任意值 |
所以我们可以
SELECT NAME ADDRESS FROM COMPANY WHERE NAME GLOB '*l' AND ADDRESS GLOB 'C*';
还有我们可能需要按照薪水的高低进行排序,此时有排序语句
SELECT column-list FROM table_name [WHERE condition] [ORDER BY column1,.. columnN] [ASC | DESC];
比如这里按照薪水进行升序排序
SELECT * FROM COMPANY ORDER BY SALARY ASC;