SqLite3基本操作

嵌入式开发数据库:SQLite, FireBird, eXtremetDB,3万行的基于c和c++的源码,SQLite 数据库,是一个非常轻量级自包含(lightweight and self-contained)的DBMS,它可移植性好,很容易使用,很小,高效而且可靠。

SQLite嵌入到使用它的应用程序中,它们共用相同的进程空间,而不是单独的一个进程。从外部看,它并不像一个RDBMS,但在进程内部,它却是完整的,自包含的数据库引擎。

嵌入式数据库的一大好处就是在你的程序内部不需要网络配置,也不需要管理。因为客户端和服务器在同一进程空间运行。

SQLite 的数据库权限只依赖于文件系统,没有用户帐户的概念。SQLite 有数据库级锁定,没有网络服务器。它需要占用内存,但其它开销很小,适合用于嵌入式设备,需要做的仅仅是把它正确的编译到的程序。

一、存储种类和数据类型:

1、数据类型:

NULL: 表示该值为NULL值。 INTEGER: 无符号整型值。 REAL: 浮点值。 TEXT: 文本字符串,存储使用的编码方式为UTF-8、UTF-16BE、UTF-16LE。 BLOB: 存储Blob数据,该类型数据和输入数据完全相同。

2、类型亲缘性:

为了最大化SQLite和其它数据库引擎之间的数据类型兼容性,SQLite提出了”类型亲缘性(Type Affinity)”的概念。我们可以这样理解”类型亲缘性 “,在表字段被声明之后,SQLite都会根据该字段声明时的类型为其选择一种亲缘类型,当数据插入时,该字段的数据将会优先采用亲缘类型作为该值的存储方式,除非亲缘类型不匹配或无法转换当前数据到该亲缘类型,这样SQLite才会考虑其它更适合该值的类型存储该值。SQLite目前的版本支持以下五种亲缘类型:

亲缘类型

TEXT

数值型数据在被插入之前,需要先被转换为文本格式,之后再插入到目标字段中。

NUMERIC

当文本数据被插入到亲缘性为NUMERIC的字段中时,如果转换操作不会导致数据信息丢失以及完全可逆,那么SQLite就会将该文本数据转换为INTEGER或REAL类型的数据,如果转换失败,SQLite仍会以TEXT方式存储该数据。对于NULL或BLOB类型的新数据,SQLite将不做任何转换,直接以NULL或BLOB的方式存储该数据。需要额外说明的是,对于浮点格式的常量文本,如”30000.0″,如果该值可以转换为INTEGER同时又不会丢失数值信息,那么SQLite就会将其转换为INTEGER的存储方式。

INTEGER

对于亲缘类型为INTEGER的字段,其规则等同于NUMERIC,唯一差别是在执行CAST表达式时。

REAL

其规则基本等同于NUMERIC,唯一的差别是不会将”30000.0″这样的文本数据转换为INTEGER存储方式。

NONE

不做任何的转换,直接以该数据所属的数据类型进行存储。

(1)决定字段亲缘性的规则:

字段的亲缘性是根据该字段在声明时被定义的类型来决定的,具体的规则可以参照以下列表。需要注意的是以下列表的顺序,即如果某一字段类型同时符合两种亲缘性,那么排在前面的规则将先产生作用。

1). 如果类型字符串中包含”INT”,那么该字段的亲缘类型是INTEGER。

2). 如果类型字符串中包含”CHAR”、”CLOB”或”TEXT”,那么该字段的亲缘类型是TEXT,如VARCHAR。

3). 如果类型字符串中包含”BLOB”,那么该字段的亲缘类型是NONE。

4). 如果类型字符串中包含”REAL”、”FLOA”或”DOUB”,那么该字段的亲缘类型是REAL。 5). 其余情况下,字段的亲缘类型为NUMERIC。

(2)具体示例:

声明类型亲缘类型应用规则INTINTEGERTINYINTSMALLINTMEDIUMINTBIGINTUNSIGNED BIG INTINT2INT8INTEGER1CHARACTER(20)VARCHAR(255)VARYING CHARACTER(255)NCHAR(55)NATIVE CHARACTER(70)NVARCHAR(100)TEXTCLOBTEXT2BLOBNONE3REALDOUBLEDOUBLE PRECISIONFLOATREAL4NUMERICDECIMAL(10,5)BOOLEANDATEDATETIMENUMERIC5

注:在SQLite中,类型VARCHAR(255)的长度信息255没有任何实际意义,仅仅是为了保证与其它数据库的声明一致性。

二.数据库的安装

1)本地安装

sudo dpkg -i *.deb

2)在线安装

sudo apt-get isntall -sqlite3

一、基本操作命令:(系统命令)

1、创建数据库:

sqlite3 数据库名

例如:[root@192 ~]# sqlite3 /home/DataBases/user.db

2、显示数据库:

.databases

例如:sqlite> .databases

3、创建表:SQL语句以分号”;”结束,敲回车键之后,SQL语句就会执行

sqlite> create table person(id integer primary key,name varchar(10),age integer);

4、显示所有的表和视图:

sqlite> .tables

5、显示表结构:

sqlite> .schema 【表名】

6、获取指定表的索引列表:

sqlite> .indices 【表名】

7、从SQL文件导入数据库:

sqlite> .read 【文件名】

8、导出数据库到SQL文件:

sqlite> .output 【文件名】

sqlite> .dump

sqlite> .output stdout

9、格式化输出数据到CSV格式:

sqlite> .output 【文件名.csv】

sqlite> .separator

sqlite> .select * from test;

sqlite> .output stdout

10、从CSV文件导入数据到表中:

sqlite> .import 【文件名.csv】 【表名】

11、备份数据库:

[root@jovan ~]# sqlite3 【数据库名】 .dump > backup.sql

12、恢复数据库:

[root@jovan~]# sqlite3 【数据库名】 < backup.sql

三.sql 命令

1)创建一个表

create table stu(id Integer,name char ,scroe Integer);

常见一个表格 ,表名 ,字段, 字段名, 字段类型,以分号结尾;

不以点开头,以分号结尾

2)插入一条数据

insert into stu values(Id Insteger, name char, score Integer);

isnert into stu (name, scroe)values(1003,”wangwu”);

3)查询

select *from stu // 查询所有字段

select name from stu // 查询部分字段

select score from stu

4)按照条件查询

select * from stu where score=80;

select *from stu where scroe =90 and id =1001;

select * from stu where score =90 or name = ‘dyy’

5)删除一条数据

delete from stu where id =1003;

delete from stu where name = ‘dyy’;

delete from stu where name = ‘dyy’ and score = 90;

delete from stu where name = ‘dyy’ or scroe = 100;

6)更新一条数据

update stu set name = ‘wangwu’ where id =1001;

update stu set name= ‘wangwu’,score = 90 where id =1001

ps: SQLite3对于数据的类型检查是是比较弱的,在操作数据库的时候

Original: https://blog.csdn.net/Mr_dong_ya_yun/article/details/117706045
Author: JovanDong
Title: SqLite3基本操作

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/816712/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球