SQLite学习笔记

学习资料:

菜鸟教程: http://www.runoob.com/sqlite/sqlite-tutorial.html


1.SQLite:

一款轻型的数据库,整个数据库都存储在一个单一文件中,通过api直接调用,在开始一个事务时锁定整个数据库.
无需安装和管理配置,没有额外依赖
嵌入式,支持多种操作系统,多种开发语言
足够小,大致13万行C代码,4.43M,资源占用很低,支持数据库大小至2TB
简单, 轻松的API

处理速度快

SQLite和mysql的区别:
SQLite的数据库权限只依赖于文件系统, 没有用户账户的概念.
参考: 
http://blog.51cto.com/ivanzz/1130544

https://blog.csdn.net/zbw1185/article/details/47975965


2.安装SQLite

一般操作系统自带,可通过sqlite3命令检查是否安装.
若没有安装,安装步骤见: http://www.runoob.com/sqlite/sqlite-installation.html

3.数据类型

integer int, integer, tinyint, smallint, mediumint, bigint, unsigned big int, int2, int8
text character(20), varchar(255), varying character(255), nchar(55), native character(70), nvarchar(100), text, clob
none blob, no datatype specified
real real, double, double precision, float
numeric

numeric, decimal(10,5), boolean, date, datetime

4.运算符

一般用于where语句

算术运算符 + - * / %
比较运算符 == = != <> > < >= <= !< !>
逻辑运算符 and, or, between, exists, in, not in, like, glob, not, is null, is(=), is not(!=), ||, unique
位运算符(作用于二进制) &且, |或, ~翻转, <<左移, >>右移 
LIKE: 运算符用于把某个值与使用通配符运算符的相似值进行比较。
GLOB: 运算符用于把某个值与使用通配符运算符的相似值进行比较。GLOB 与 LIKE 不同之处在于,它是大小写敏感的。
||: 连接两个不同的字符串,得到一个新的字符串。

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


5.sqlite命令

.help  显示帮助
.show  显示设置值

.header on  显示头部

.databases  显示数据库

.tables 显示表

.exit  退出sqlite提示符

.quit  退出sqlite提示符

注释:
sqlite> .help -- This is a comment

sqlite> .help /*This is a comment*/

1)数据库

创建数据库:
sqlite3 Dbname.db

导出数据库成文件:
sqlite3 dbname.db .dump > backup.sql
导入:
sqlite3 dbname.db < backup.sql

附加数据库:
ATTACH DATABASE 'DatabaseName' As 'Alias-Name';

如果数据库尚未被创建,上面的命令将创建一个数据库,如果数据库已存在,则把数据库文件名称与逻辑数据库 'Alias-Name' 绑定在一起。

分离数据库:
DETACH DATABASE 'Alias-Name';

2)表

创建表:
CREATE TABLE table_name(
   column1 datatype primary key not null,
   column2 datatype,
   column3 datatype,
   .....
   columnN datatype,

);

删除表:
drop table table_name;

查看表的create语句
.schema


向表插入数据:
INSERT INTO table_name (column1, column2....columnN)
VALUES (value1, value2....valueN);
使用一个表填充另一个表:
INSERT INTO first_table_name (column1, column2, ... columnN)
   SELECT column1, column2, ...columnN 
   FROM second_table_name
   [WHERE condition];


查询表:
SELECT column1, column2, columnN FROM table_name;


修改表:
UPDATE table_name
SET column1 = value1, column2 = value2...., columnN = valueN
WHERE [condition];


删除表记录:
DELETE FROM table_name
WHERE [condition];
删除所有记录:

DELETE FROM table_name;


3)子句

WHERE 子句可用在SELECT, UPDATE, DELETE 语句中, 还可以使用比较或逻辑运算符指定条件.

SELECT column1, column2, columnN 

FROM table_name

WHERE [condition]


LIKE 运算符是用来匹配通配符指定模式的文本值.

% 代表零个、一个或多个数字或字符.
_ 代表一个单一的数字或字符.

SELECT column_list 

FROM table_name

WHERE column LIKE '%XXXX%'



GLOB 运算符是用来匹配通配符指定模式的文本值, GLOB 是大小写敏感的.
* 代表零个、一个或多个数字或字符.
? 代表一个单一的数字或字符。

SELECT FROM table_name

WHERE column GLOB '????'



LIMIT 子句用于限制由 SELECT 语句返回的数据数量。
OFFSET 用于指定偏移量, 以下语句即从第三行开始提取4个记录:

SELECT * FROM table_name LIMIT 4 OFFSET 2;



ORDER BY 子句是用来基于一个或多个列按升序asc或降序desc顺序排列数据。

SELECT column-list 

FROM table_name 

[WHERE condition] 

[ORDER BY column1, column2, .. columnN] [ASC | DESC];



GROUP BY 子句用于与 SELECT 语句一起使用,来对相同的数据进行分组。
在 SELECT 语句中,GROUP BY 子句放在 WHERE 子句之后,放在 ORDER BY 子句之前。

SELECT NAME, SUM(SALARY) 

FROM COMPANY 

GROUP BY NAME 

ORDER BY SALARY;



HAVING 子句允许指定条件来过滤将出现在最终结果中的分组结果。

SELECT

FROM

WHERE

GROUP BY

HAVING

ORDER BY

SELECT * FROM COMPANY GROUP BY name HAVING count(name) > 2;



DISTINCT 关键字与 SELECT 语句一起使用,来消除所有重复的记录,并只获取唯一一次记录。

SELECT DISTINCT column1, column2,.....columnN 

FROM table_name

WHERE [condition]


6.通过python操作sqlite3


https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001388320596292f925f46d56ef4c80a1c9d8e47e2d5711000

>>> import sqlite3
>>> conn = sqlite3.connect('test.db')
>>> cursor = conn.cursor()
>>> cursor.execute('create table user (Id varchar(20) primary key, name varchar(20))')
>>> cursor.execute('insert into user (id, name) values (\'1\', \'Michael\')')
//如果SQL语句带有参数,那么需要把参数按照位置传递给execute()方法,有几个?占位符就必须对应几个参数,例如:
>>> cursor.execute('select * from user where id = ?', ('1',))

>>> cursor.execute('select * from user where id = ? and name = ?', ('2','Ann'))
>>> values = cursor.fetchall()
>>> cursor.close()
//执行commit以后,插入数据才被提交到sqlite3数据库中
>>> conn.commit()
>>> conn.close()


你可能感兴趣的:(编程语言)