`
hulianwang2014
  • 浏览: 681313 次
文章分类
社区版块
存档分类
最新评论
  • bcworld: 排版成这样,一点看的欲望都没有了
    jfinal

sqlite之我见--简单介绍与基本操作

 
阅读更多
首先,看到此篇文章的人,肯定都对sqlite有所了解了,那些开场白之类的废话就不多写了,下面就简单的介绍sqlite的一些基本知识及简单操作,可能会有错漏的地方,欢迎批评指正,我也会不断学习并完善这篇文章

1.特性

1)ACID事物
2)零配置--无需安装与管理配置
3)储存在单一磁盘文件中的完整的数据库
4)数据库文件可以在不同字节顺序的机器间自由的共享
5)支持数据库文件大小至2TB
6)足够小,大致3w行C代码,250k
7)比一些流行的数据库在大部分普通数据库操作要快
8)简单,轻松的API
9)良好注释的源代码,并且有着90%以上的测试覆盖率
10)包含TCL绑定,可以通过wrapper支持其他语言的绑定
11)独立:没有额外依赖
12)Source完全的open,你可以用于任何用途,甚至出售
13)支持多种开发语言,C,PHP,Perl,JAVA,ASP.NET,Python

2.数据类型

sqlite是无类型的,但为了增强可读性与可移植性,建议加上类型。在字段类型为“Integer Primary Key”时并不是无类型的。

CREATE TABLE ex(
a VARCHAR(10), 可变长度的字符串
b NVARCHAR(15),
c TEXT, 文本型
d INTEGER, 整型
e FLOAT, 浮点型
f BOOLEAN, 布尔型
g CLOB,
h BLOB, 二进制类型,用来存储文件,比如图片
i TIMESTAMP,
j NUMERIC(10,5),
k VARYING CHARACTER(24),
l NATIONAL VARYING CHARACTER(16)
NULL 空值

3.支持的SQL

BEGIN TRANSACTION
END TRANSACTION
comment
COMMIT TRANSACTION

CREATE INDEX
CREATE TABLE
CREATE TRIGGER
CREATE VIEW
COPY
DELETE
DETACH DATABASE

DROP INDEX
DROP TABLE
DROP TRIGGER
DROP VIEW

EXPLAIN
expression
INSERT
ON CONFLICT clause
PRAGMA
REPLACE
ROLLBACK TRANSACTION
SELECT
UPDATE

4.数据库的简单使用:

1)创建数据库

在命令提示符下:
$ sqlite3 testsql.db
sqlite> .quit 此时ls看下当前目录,是没有db文件生成的

$ sqlite3 testsql.db
sqlite> ;
sqlite> .quit 此时ls会看到有testsql.db在当前目录下
具体操作如下:
[carl@Fedora sqlite]$ sqlite3 testsql.db
SQLite version 3.7.11 2012-03-20 11:35:50
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .quit
[carl@Fedora sqlite]$ ls
[carl@Fedora sqlite]$ sqlite3 testsql.db
SQLite version 3.7.11 2012-03-20 11:35:50
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> ;
sqlite> .quit
[carl@Fedora sqlite]$ ls
testsql.db
[carl@Fedora sqlite]$

2)创建表

create table testtable(column1 varchar(10), column2 int);
不要忘了加分号,代表一条语句输入完毕
testtable是要创建的表名。create和table是关键字,column1 column2是两个表项。
varchar(10) int是类型。虽然sqlite是无类型的,但是创建表的时候指定一个类型,可以增强可移植性。
操作如下:
[carl@Fedora sqlite]$ sqlite3 testsql.db
SQLite version 3.7.11 2012-03-20 11:35:50
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> create table testtable(column1 varchar(10), column2 int);
sqlite> .tab
testtable
sqlite> select * from sqlite_master
   ...> ;
table|testtable|testtable|2|CREATE TABLE testtable(column1 varchar(10), column2 int)
sqlite> 

3)向表中插入一条记录

insert into testtable values("column1 is string", 10);
插入完毕,哎呀,column1 is string这明显超出了varchar(10)类型指定的长度了,让我们查看一下表中的内容现在怎么样了吧。看下节------->

4)查询表中内容

select * from testtable;
此条语句可列出表testtable中的所有内容。
让我们先看一下上面的插入语句结果如何
sqlite> select * from testtable
   ...> ;
column1 is string|10
sqlite>

我们再插入一个更长的试试
sqlite> insert into testtable values("column1 is string,this is longer", 10);
sqlite> select * from testtable;
column1 is string|10
column1 is string,this is longer|10
sqlite> 

看起来第一列的长度完全不受限制

5)sqlite3 testsql.db的规则

退出,再重新打开数据库:
sqlite> .quit
[carl@Fedora sqlite]$ sqlite3 testsql.db 
SQLite version 3.7.11 2012-03-20 11:35:50
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> select * from testtable;
column1 is string|10
column1 is string,this is longer|10
sqlite>

可见sqlite3 testsql.db的规则为,如果testsql.db已存在,则直接打开,否则创建一个新的数据库testsql.db

6)查询一个数据库中所有的表名

sqlite数据库中有一个系统建立的表,sqlite_master,上面第2)小节也有调用,查询这个表就可以得到数据库中所有的
sqlite> create table testtable2(column1 int);
sqlite> insert into testtable2 values(30);
sqlite> select * from testtable2;
30
sqlite> select * from sqlite_master;
table|testtable|testtable|2|CREATE TABLE testtable(column1 varchar(10), column2 int)
table|testtable2|testtable2|3|CREATE TABLE testtable2(column1 int)
sqlite> 

关于此表,官网FAQ定义如下:
CREATE TABLE sqlite_master(type TEXT, name TEXT, tal_name TEXT, rootpage INTEGER, sql TEXT);

7)sqlite的输出格式

默认的输出格式是“列表”。在列表模式下,每条查询结果记录被写在一行中并且每列之间以一个字符串分隔符隔开,默认的分隔符为管道符号"|"。
sqlite支持的输出格式包括:csv column html insert line list tabs tcl
具体使用方法如下:
[carl@Fedora sqlite]$ sqlite3 testsql.db 
SQLite version 3.7.11 2012-03-20 11:35:50
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .mode list
sqlite> select * from testtable
   ...> ;
column1 is string|10
column1 is string,this is longer|10
sqlite> .mode csv
sqlite> select * from testtable;
"column1 is string",10
"column1 is string,this is longer",10
sqlite> .mode column
sqlite> select * from testtable;
column1 is string  10        
column1 is string  10        
sqlite> .mode html
sqlite> select * from testtable;
<TR><TD>column1 is string</TD>
<TD>10</TD>
</TR>
<TR><TD>column1 is string,this is longer</TD>
<TD>10</TD>
</TR>
sqlite> .mode insert
sqlite> select * from testtable;
INSERT INTO table VALUES('column1 is string',10);
INSERT INTO table VALUES('column1 is string,this is longer',10);
sqlite> .mode line
sqlite> select * from testtable;
column1 = column1 is string
column2 = 10

column1 = column1 is string,this is longer
column2 = 10
sqlite> .mode tabs
sqlite> select * from testtable;
column1 is string	10
column1 is string,this is longer	10
sqlite> .mode tcl
sqlite> select * from testtable;
"column1 is string"	"10"	
"column1 is string,this is longer"	"10"	
sqlite> .output output.txt              //输出到文件
sqlite> select * from testtable;
sqlite> .exit
[carl@Fedora sqlite]$ cat output.txt 
"column1 is string"    "10"    
"column1 is string,this is longer"    "10"    
[carl@Fedora sqlite]$

8)查看数据库中所有的表

除了上面第6)小节介绍的sqlite_master外,还有另一种方法,如下
sqlite> .tables
testtable   testtable2
sqlite>

9)查看所有的表的创建语句

sqlite> .schema
CREATE TABLE testtable(column1 varchar(10), column2 int);
CREATE TABLE testtable2(column1 int);
sqlite> .schema testtable
CREATE TABLE testtable(column1 varchar(10), column2 int);
sqlite> .schema testtable2
CREATE TABLE testtable2(column1 int);
sqlite> 

10)删除记录

sqlite> select * from testtable2;
30
sqlite> delete from testtable2 where column1=30;
sqlite> select * from testtable2;
sqlite>

可以删掉表testtable2中column1为30的条目。注意delete from testtable2 而不是delete * from testtable2

11)数据库的导入与导出

即备份一个一模一样的数据库,首先看一下一个新的命令
sqlite> .dump
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE testtable(column1 varchar(10), column2 int);
INSERT INTO testtable VALUES('column1 is string',10);
INSERT INTO testtable VALUES('column1 is string,this is longer',10);
CREATE TABLE testtable2(column1 int);
COMMIT;
sqlite> 

可以得到一个用来创建当前数据库的原子操作集合。我们可以利用这个集合来创建一个新的一模一样的数据库
[carl@Fedora sqlite]$ sqlite3 copiedsql.db
SQLite version 3.7.11 2012-03-20 11:35:50
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .tab
sqlite> .read dump.sql 
sqlite> .tab
testtable   testtable2
sqlite> select * from testtable;
column1 is string|10
column1 is string,this is longer|10
sqlite> select * from testtable2;
sqlite> .quit
[carl@Fedora sqlite]$

以上也是从网上查出并加以总结,水平有限,欢迎交流。
下一篇SQLITE文章sqlite之我见--C/C++ API接口介绍中,我会介绍一下一些常用的C/C++ API接口。

水平有限,如果有朋友发现错误,欢迎留言交流。
转载请保留本文链接,如果觉得我的文章能帮到您,请顶一下。,谢谢。




分享到:
评论

相关推荐

    Android数据库SQLite基本操作工程

    Android数据库SQLite基本操作工程,最简单的增删改查方法。

    iOS源生SQLite3基本操作(Swift-OC混编)

    对iOS开发中使用到得SQLite3进行简单的操作,展示基本的使用方法,使用语言Swift-OC混编。

    SQLite教程(一):SQLite数据库介绍

     SQLite是目前最流行的开源嵌入式数据库,和很多其他嵌入式存储引擎相比(NoSQL),如BerkeleyDB、MemBASE等,SQLite可以很好的支持关系型数据库所具备的一些基本特征,如标准SQL语法、事务、数据表和索引等。...

    C#语言实现操作SQLite数据库完成基本的增、删、改、查简单的操作例子

    本例子使用C#语言实现操作SQLite数据库,完成基本的增、删、改、查,不是复杂的功能,具体介绍可以看:https://www.cnblogs.com/JiYF/p/11260178.html 看这里,代码已经给出,看懂的人,就没必要下载了。...

    C++ 读写Excel以及操作SQLite

    该文件中包含有: 1、NPOI_EXCEL工程: 该工程文件中包含有C#工程对NPOI.dll的的读写进行封装成类库的操作,主要是使用... 该工程是C++操作数据库的简单封装,主要是对数据库的基本操作,涉及有SQLite和SQL Sever数据库

    iOS源生SQLite3基本操作(OC版)

    对iOS开发中使用到得SQLite3进行简单的操作,展示基本的使用方法,使用语言OC。

    Android代码-一个简单的 SQLite 和 Excel 互相转换的库子

    SQLiteToExcel 库整合了 Apache POI 和一些基本的数据库操作,使得 SQLite 和 Excel 之间相互转换更加便捷。 从 v1.0.5 版本开始,不再支持 xlsx 格式,因为 poi ooxml 库和其他一些相关的依赖太大了,体积超过了 10...

    C#下使用SQlite小示例

    自己写得SQlite操作示例,演示了C#下面怎么使用SQlite的基本语句

    SQLite Micro Manager:最简单SQLite3 GUI程序-开源

    SQLite Micro Manager是一个轻量级,快速且可配置的GUI程序,主要用于访问,浏览和修改由其他应用程序维护SQLite3数据库中的... 目标读者是至少具有SQL基本知识的人员,他们需要快速简单的工具来处理SQLite3数据库。

    android_sqlite测试

    SQLite是一种轻量级的小型数据库,虽然比较小,但是功能相对...Android系统中也不例外,也是采用SQLite,本节中就学习下在andorid中怎样使用该数据库来存放数据,并且对SQLite完成简单的新建,更新,查询,删除等操作。

    基于tkinter+sqlite3的智能图书管理系统

    本期博主将使用Tkinter和SQLite3技术实现一个GUI版智能图书管理系统,主要考察Python的GUI界面开发以及数据库的基本操作。 - Tkinter:Tkinter是Python的一个标准库,用于创建图形用户界面(GUI)。它提供了一系列...

    Android-SQLiteToExcel一个简单的SQLite和Excel互相转换库

    SQLiteToExcel 库整合了 Apache POI 和一些基本的数据库查询操作,使得 SQLite 和 Excel 之间相互转换更加便捷。

    ios-sqlite3增删改查Demo.zip

    demo意在帮助初步接触sqlite3的开发者更好的理解ios数据本地化 ...基本功能:本地数据的增删改查的简单操作。 主要步骤:1 加入libsqlite3库 2 创建sqlite管理类单例 3 在管理类创建管理数据接口

    SQLite数据库使用工具类

    封装了SQLite的基本操作,只需要将源码导入工程,修改相应的字段名称,就能直接调用相应的封装好的方法。数据库的使用就是如此简单。

    sqlite for C#.zip_SQLite 免安装_c# sqlite_sqlite_sqlite C# 数据库 轻量

    sqlite数据库是轻量级的数据库,非常实用,免安装,极其方便。本类库包含了C#对sqlite数据库的各种基本操作,如创建、删除数据库,对数据库内容的增删查改等等。整个程序简单易用。

    Android案例:图书信息管理系统。利用SQLite+ListView,实现图书增删查改

    利用SQLite数据库 + ListView开发技术,实现了一个简易的图书信息管理系统,其功能模块包括图书信息的增加、删除、修改、查询等。

    iOS存储(文件存储,sqlite数据库操作)

    iOS中基本的文件存储代码,偏好设置,sqlite数据库操作,封装好的操作类,使用简单,代码打开即可运行

    orm:使用 Annotation 处理器和 Sqlite 的 Android Basic-ORM

    基本ORM 使用 Annotation 处理器和 Sqlite 数据库的Beta Android 数据库助手。 Orm 的行为不像“传统”的 orm 库。 实体不附属于任何类型的“状态”或“会话”。 尽可能简单地执行创建/读取/更新/删除操作,让 Basic...

    SQLite数据库安装及基本操作指南

    与其他数据库管理系统不同,SQLite 的安装和运行非常简单,在大多数情况下 – 只要确保SQLite的二进制文件存在即可开始创建、连接和使用数据库。如果您正在寻找一个嵌入式数据库项目或解决方案,SQLite是绝对值得...

Global site tag (gtag.js) - Google Analytics