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

2024-02-07 16:32

本文主要是介绍sqlite之我见--简单介绍与基本操作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转载自:http://blog.csdn.net/wzzfeitian/article/details/7978140

首先,看到此篇文章的人,肯定都对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接口。

 

这篇关于sqlite之我见--简单介绍与基本操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/688297

相关文章

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

hdu2289(简单二分)

虽说是简单二分,但是我还是wa死了  题意:已知圆台的体积,求高度 首先要知道圆台体积怎么求:设上下底的半径分别为r1,r2,高为h,V = PI*(r1*r1+r1*r2+r2*r2)*h/3 然后以h进行二分 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#includ

usaco 1.3 Prime Cryptarithm(简单哈希表暴搜剪枝)

思路: 1. 用一个 hash[ ] 数组存放输入的数字,令 hash[ tmp ]=1 。 2. 一个自定义函数 check( ) ,检查各位是否为输入的数字。 3. 暴搜。第一行数从 100到999,第二行数从 10到99。 4. 剪枝。 代码: /*ID: who jayLANG: C++TASK: crypt1*/#include<stdio.h>bool h

uva 10387 Billiard(简单几何)

题意是一个球从矩形的中点出发,告诉你小球与矩形两条边的碰撞次数与小球回到原点的时间,求小球出发时的角度和小球的速度。 简单的几何问题,小球每与竖边碰撞一次,向右扩展一个相同的矩形;每与横边碰撞一次,向上扩展一个相同的矩形。 可以发现,扩展矩形的路径和在当前矩形中的每一段路径相同,当小球回到出发点时,一条直线的路径刚好经过最后一个扩展矩形的中心点。 最后扩展的路径和横边竖边恰好组成一个直

图神经网络模型介绍(1)

我们将图神经网络分为基于谱域的模型和基于空域的模型,并按照发展顺序详解每个类别中的重要模型。 1.1基于谱域的图神经网络         谱域上的图卷积在图学习迈向深度学习的发展历程中起到了关键的作用。本节主要介绍三个具有代表性的谱域图神经网络:谱图卷积网络、切比雪夫网络和图卷积网络。 (1)谱图卷积网络 卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,即F{f*g}

poj 1113 凸包+简单几何计算

题意: 给N个平面上的点,现在要在离点外L米处建城墙,使得城墙把所有点都包含进去且城墙的长度最短。 解析: 韬哥出的某次训练赛上A出的第一道计算几何,算是大水题吧。 用convexhull算法把凸包求出来,然后加加减减就A了。 计算见下图: 好久没玩画图了啊好开心。 代码: #include <iostream>#include <cstdio>#inclu

uva 10130 简单背包

题意: 背包和 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <queue>#include <map>