Sqlite   发布时间:2022-05-22  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了sqlite3常用命令&语法大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

http://blog.csdn.net/linchunhua/article/details/7184439


sqlite数据库只用一个文件就ok,小巧方便,所以是一个非常不错的嵌入式数据库,sqlite大量的被用于手机,PDA,MP3播放器以及机顶盒设备。
Mozilla firefox使用SQLite作为数据库。
Mac计算机中的包含了多份sqlite的拷贝,用于不同的应用。
phpsqlite作为内置的数据库。
Skype客户端软件在内部使用SQLite。
SymbianOS(智能手机操作平台的领航)内置sqlite。
Aol邮件客户端绑定了sqlite。
Solaris 10在启动过程中需要使用sqlite
McAfee杀毒软件使用SQLite。
iPhones使用SQLite。
Symbian和Apple以外的很多手机生产厂商使用SQLite。
下面就sqlite中的常用命令和语法介绍
http://www.sqlite.org/download.HTML可下载不同操作系统的相关版本sqlite gedit
也可以使用火狐中的插件sqlite manager


新建数据库
sqlite3 databasefilename
检查databasefilename是否存在,如果不存在就创建并进入数据库(如果直接退出,数据库文件不会创建) 如果已经存在直接进入数据库 对数据库进行操作


sqlite中命令:
以.开头,大小写敏感(数据库对象名称是大小写不敏感的)
.exit
.Help 查看帮助 针对命令
.database 显示数据库信息;包含当前数据库的位置
.tables 或者 .table 显示表名称 没有表则不显示
.scheR_617_11845@a 命令可以查看创建数据对象时的sql命令;
.scheR_617_11845@a databaSEObjectname查看创建该数据库对象时的sql的命令;如果没有这个数据库对象就不显示内容,不会有错误提示


.read filename 执行指定文件中的sql语
.headers on/off 显示表头 默认off


.mode List|column|insert|line|tabs|tcl|csv 改变输出格式,具体如下


sqlite> .mode List
sqlite> SELEct * from emp;
@R_674_10811@|SMITH|CLERK|7902|17-12-1980|800||20
7499|ALLEN|SALEsmaN|7698|20-02-1981|1600|300|30
如果字段值为NulL 默认不显示 也就是显示空字符串


sqlite> .mode column
sqlite> SELEct * from emp;
@R_674_10811@ SMITH CLERK 7902 17-12-1980 800 20
7499 ALLEN SALEsmaN 7698 20-02-1981 1600 300 30
7521 WARD SALEsmaN 7698 22-02-1981 1250 500 30


sqlite> .mode insert
sqlite> SELEct * from dept;
INSERT INTO table VALUES(10,'ACCOUNTinG','NEW YORK');
INSERT INTO table VALUES(20,'RESEARCH','DALLAS');
INSERT INTO table VALUES(30,'SALES','CHICAGO');
INSERT INTO table VALUES(40,'OPERATIONS','BOSTON');


sqlite> .mode line
sqlite> SELEct * from dept;
DEPTNO = 10
Dname = ACCOUNTinG
LOC = NEW YORK


DEPTNO = 20
Dname = RESEARCH
LOC = DALLAS


DEPTNO = 30
Dname = SALES
LOC = CHICAGO


DEPTNO = 40
Dname = OPERATIONS
LOC = BOSTON


sqlite> .mode tabs
sqlite> SELEct * from dept;
10 ACCOUNTinG NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON


sqlite> .mode tcl
sqlite> SELEct * from dept;
"10" "ACCOUNTinG""NEW YORK"
"20" "RESEARCH""DALLAS"
"30" "SALES" "CHICAGO"
"40" "OPERATIONS""BOSTON"


sqlite> .mode csv
sqlite> SELEct * from dept;
10,ACCOUNTinG,"NEW YORK"
20,RESEARCH,DALLAS
30,SALES,CHICAGO
40,OPERATIONS,BOSTON


.separator "X" 更改分界符号为X
sqlite> .separator '**'
sqlite> SELEct * from dept;
10**ACCOUNTinG**"NEW YORK"
20**RESEARCH**DALLAS
30**SALES**CHICAGO
40**OPERATIONS**BOSTON


.dump ?table? 生成形成数据库表的sql脚本
.dump 生成整个数据库的脚本在终端显示
.output stdout 将输出打印到屏幕 默认
.output filename 将输出打印到文件(.dump .output 结合可将数据库以sql语句的形式导出到文件中)
.nullvalue StriNG 查询时用指定的串代替输出的NulL串 默认为.nullvalue ''


字段类型:


数据库中存储的每个值都有一个类型,都属于下面所列类型中的一种,(被数据库引擎所控制)
NulL: 这个值为空值
IntegeR: 值被标识为整数,依据值的大小可以依次被存储为1,2,3,4,5,6,7,8个字节
REAL: 所有值都是浮动的数值,被存储为8字节的IEEE浮动标记序号.
TEXT: 文本. 值为文本字符串,使用数据库编码存储(TUTF-8,UTF-16BE or UTF-16-LE).
BLOB: 值是BLOB数据,如何输入就如何存储,不改变格式.


值被定义为什么类型只和值自身有关,和列没有关系,和变量也没有关系.所以sqlite被称作 弱类型 数据库
数据库引擎将在执行时检查、解析类型,并进行数字存储类型(整数和实数)和文本类型之间的转换.
sql语句中部分的带双引号或单引号的文字被定义为文本,
如果文字没带引号并没有小数点或指数则被定义为整数,
如果文字没带引号但有小数点或指数则被定义为实数,
如果值是空则被定义为空值.
BLOB数据使用符号X'ABCD'来标识.


但实际上,sqlite3也接受如下的数据类型:
smallint 16位的整数。
interger 32位的整数。
decimal(p,s) 精确值p是指全部有几个十进制数,s是指小数点后可以有几位小数。如果没有特别指定,则系统会默认为p=5 s=0
float 32位元的实数。
double 64位元的实数。
char(n) n 长度的字串,n不能超过 254。
varchar(n) 长度不固定且其最大长度为 n 的字串,n不能超过 4000。
graphic(n) 和 char(n) 一样,不过其单位是两个字节, n不能超过127。这个形态是为了支持两个字节长度的字体,如中文字。
vargraphic(n) 可变长度且其最大长度为n的双字元字串,n不能超过2000
date 包含了 年份、月份、日期。
time 包含了 小时、分钟、秒。
timestamp 包含了 年、月、日、时、分、秒、千分之一秒。


sqlite包含了如下时间/日期函数:
datetiR_617_11845@e() 产生日期和时间 无参数表示获得当前时间和日期
sqlite> SELEct datetiR_617_11845@e();
2012-01-07 12:01:32
有字符串参数则把字符串转换成日期
sqlite> SELEct datetiR_617_11845@e('2012-01-07 12:01:30');
2012-01-07 12:01:30


SELEct date('2012-01-08','+1 day','+1 year');
2013-01-09


SELEct datetiR_617_11845@e('2012-01-08 00:20:00','+1 hour','-12 minute');
2012-01-08 01:08:00


SELEct datetiR_617_11845@e('Now','start of year');
2012-01-01 00:00:00


SELEct datetiR_617_11845@e('Now','start of month');
2012-01-01 00:00:00


SELEct datetiR_617_11845@e('Now','start of day');
2012-01-08 00:00:00


SELEct datetiR_617_11845@e('Now','start of week');错误


SELEct datetiR_617_11845@e('Now','localtime');
结果:2006-10-17 21:21:47


date()产生日期
sqlite> SELEct date('2012-01-07 12:01:30');
2012-01-07
同理 有参和无参
SELEct date('Now','start of year');
2012-01-01


SELEct date('2012-01-08','+1 month');
2012-02-08


time() 产生时间
SELEct time();
03:14:30


SELEct time('23:18:59');
23:18:59


SELEct time('23:18:59','start of day');
00:00:00


SELEct time('23:18:59','end of day');错误


在时间/日期函数里可以使用如下格式的字符串作为参数:
YYYY-MM-DD
YYYY-MM-DD HH:MM
YYYY-MM-DD HH:MM:SS
YYYY-MM-DD HH:MM:Ss.SSS
HH:MM
HH:MM:SS
HH:MM:Ss.SSS
Now
其中Now是产生现在的时间。


日期不能正确比较大小,会按字符串比较,日期默认格式 dd-mm-yyyy
SELEct hiredate from emp order by hiredate;


17-11-1981
17-12-1980
19-04-1987
20-02-1981
22-02-1981


strftime() 对以上三个函数产生的日期和时间进行格式化
strftime()函数可以把YYYY-MM-DD HH:MM:SS格式的日期字符串转换成其它形式的字符串。 strftime(格式,日期/时间,修正符,…) SELEct strftime('%d',datetiR_617_11845@e());
它可以用以下的符号对日期和时间进行格式化:
%d 在该月中的第几天,01-31
%f 小数形式的秒,Ss.SSS
%H 小时,00-23
%j 算出某一天是该年的第几天,001-366
%m 月份,00-12
%M 分钟,00-59
%s 从1970年1月1日到现在的秒数
%s 秒,00-59
%w 星期,0-6 (0是星期天)
%W 算出某一天属于该年的第几周,01-53
%Y 年,YYYY
%% 百分号


SELEct strftime('%Y.%m.%d %H:%M:%s','Now');
SELEct strftime('%Y.%m.%d %H:%M:%s','Now','localtime');
结果:2006.10.17 21:41:09


SELEct hiredate from emp
order by strftime('%Y.%m.%d %H:%M:%s',hiredate); 正确


SELEct strftime('%Y.%m.%d %H:%M:%s',hiredate) from emp
order by strftime('%Y.%m.%d %H:%M:%s',hiredate); 错误




算术函数
abs(X) 返回给定数字表达式的绝对值。
max(X,Y[,...]) 返回表达式的最大值。 组函数 max(列名)
sqlite> SELEct max(2,12);
12


min(X,...]) 返回表达式的最小值。
random() 返回随机数。
sqlite> SELEct random();
3224224213599993831

@R_696_7060@X[,y]) 返回数字表达式并四舍五入为指定的长度或精度。


字符处理函数
length(X) 返回给定字符串表达式的字符个数。
lower(x) 将大写字符数据转换为小写字符数据后返回字符表达式。
upper(X) 返回将小写字符数据转换为大写的字符表达式。
substr(X,Y,z) 返回表达式的一部分。 从Y开始读Z个字符 Y最小值1
sqlite> SELEct substr('abcdef',3);
cde


quote(A) 给字符串加引号
sqlite> SELEct quote('aaa');
'aaa'


条件判断函数
ifnull(X,Y) 如果X为null 返回Y
SELEct ifnull(comm,0) from emp;
0
300
500
0
1400




集合函数
avg(X) 返回组中值的平均值。
count(X) 返回组中项目的数量。
max(X) 返回组中值的最大值。
min(X) 返回组中值的最小值。
sum(X) 返回表达式中所有值的和。


其他函数
typeof(X) 返回数据的类型。
sqlite> SELEct typeof(111);
Integer
sqlite> SELEct typeof('233');
text
sqlite> SELEct typeof('2012-12-12');
text
sqlite> SELEct typeof('223.44');
text
sqlite> SELEct typeof(223.44);
real


last_insert_rowID() 返回最后插入的数据的ID。
@R_413_5607@version() 返回sqlite的版本。
sqlite> SELEct @R_413_5607@version();
3.7.9


change_count() 返回受上一语句影响的行数。
last_statement_change_count()


create table emp_bak SELEct * from EMP;不能在Sqlite中使用


插入记录
insert into table_name values (fIEld1,fIEld2,fIEld3...);
查询
SELEct * FROM table_name;查看table_name表中所有记录;
SELEct * FROM table_name where fIEld1='xxxxx'; 查询符合指定条件的记录;


SELEct .....
from table_name[,table_name2,...]
where .....
group by....
having ....
order by ...


SELEct .....
from table_name inner join | left outer join | right outer join table_name2
on ...
where .....
group by....
having ....
order by ...


子查询:
SELEct *
from EMP m
where SAL>
(SELEct avg(SAL) from EMP where DEPTNO=m.DEPTNO);


支持case when then 语法
update EMP
set SAL=
(
case
when DEPTNO=10 and JOB='MANAGER' then SAL*1.1
when DEPTNO=20 and JOB='CLERK' then SAL*1.2
when DEPTNO=30 then SAL*1.1
when DEPTNO=40 then SAL*1.2
else SAL
END
);


SELEct ename,
case DEPTNO
when 10 then '后勤部'
when 20 then '财务部'
when 30 then '内务部门'
else '其他部门'
end as dept
from EMP;


支持关联子查询 in后面的语法中可以有limit(MysqL不可以)
SELEct *
from emp e
where e.empno in
(
select empno
from EMP
where deptno=e.deptno
order by SAL desc
limit 0,2
);


支持表和表之间的数据合并等操作
union 去重复 union all 不去掉重复
SELEct deptno from emp
union
SELEct deptno from dept;


SELEct deptno from emp
union all
SELEct deptno from dept;


在列名前加disTinct也是去重复
sqlite> SELEct disTinct deptno from emp;




删除
delete from table_name where ...


删除表
drop table_name; 删除表
drop @R_772_3688@; 删除索引;


修改
update table_name
set xxx=value[,xxx=value,...]
where ...


建立索引


如果资料表有相当多的资料,我们便建立索引来加快速度。好比说:


create index film_title_index on film(titlE);
意思是针对film资料表的name字段,建立一个名叫film_name_index的索引。这个指令的语法为


CREATE [ UNIQUE ] NONCLUSTERED INDEX @R_772_3688@
ON { table | vIEw } ( column [ ASC | DESC ] [,...n ] )
create index @R_772_3688@ on table_name(fIEld_to_be_indexed);
一旦建立了索引,sqlite3会在针对该字段作查询时,自动使用该索引。这一切的操作都是在幕后自动发生的,无须使用者特别指令。


其他sqlite的特别用法


sqlite可以在sHell底下直接执行命令:
sqlite3 film.db "SELEct * from emp;"


输出 HTML 表格:
sqlite3 -HTML film.db "SELEct * from film;"
将数据库「倒出来」:


sqlite3 film.db ".dump" > output.sql
利用输出的资料,建立一个一模一样的数据库(加上以上指令,就是标准的Sql数据库备份了):


sqlite3 film.db < output.sql
在大量插入资料时,你可能会需要先打这个指令:


begin;
插入完资料后要记得打这个指令,资料才会写进数据库中:
commit;


sqlite> begin;
sqlite> insert into aaaa values('aaa','333');
sqlite> select * from aaaa;
2|sdfds
sdfsd|9
2012-12-12|13:13:13
aaa|333
sqlite> rollBACk;
sqlite> select * from aaaa;
2|sdfds
sdfsd|9
2012-12-12|13:13:13


创建和删除视图
create view vIEw_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
DROP View view_name


create view e as
SELEct avg(SAL) avgsal,DEPTNO
from EMP
group by DEPTNO;


SELEct ename,EMP.DEPTNO,SAL,avgsal
from EMP inner join e
on EMP.DEPTNO=e.deptno
where SAL>avgsal;

练习员工表:

PRAGMA foreign_keys=OFF; BEGIN transaCTION; create table DEPT ( DEPTNO int(2) NOT NULL,DNAME varchar(14),LOC varchar(13) ); INSERT INTO "DEPT" VALUES(10,'NEW YORK'); INSERT INTO "DEPT" VALUES(20,'DALLAS'); INSERT INTO "DEPT" VALUES(30,'CHICAGO'); INSERT INTO "DEPT" VALUES(40,'BOSTON'); create table EMP ( empno int(4) not null,ename varchar(10),JOB varchar(9),MGR int(4),HIREDATE DATE,SAL int(7 ),COMM int(7 ),DEPTNO int(2) ); INSERT INTO "EMP" VALUES(@R_674_10811@,'SMITH','CLERK',7902,'17-12-1980',800,NulL,20); insert INTO "EMP" VALUES(7499,'ALLEN','SALEsmaN',7698,'20-02-1981',1600,300,30); insert INTO "EMP" VALUES(7521,'WARD','22-02-1981',1250,500,30); insert INTO "EMP" VALUES(7566,'JOnes','MANAGER',7839,'02-04-1981',2975,20); insert INTO "EMP" VALUES(7654,'MARTin','28-09-1981',1400,30); insert INTO "EMP" VALUES(7698,'BLAKE','01-05-1981',2850,30); insert INTO "EMP" VALUES(7782,'CLARK','09-06-1981',2450,10); insert INTO "EMP" VALUES(7788,'SCott','ANALYST',7566,'19-04-1987',3000,20); insert INTO "EMP" VALUES(7839,'KING','PRESIDENT','17-11-1981',5000,10); insert INTO "EMP" VALUES(7844,'TURNER','08-09-1981',1500,30); insert INTO "EMP" VALUES(7876,'AdamS',7788,'23-05-1987',1100,20); insert INTO "EMP" VALUES(7900,'JAMES','03-12-1981',950,30); insert INTO "EMP" VALUES(7902,'FORD',20); insert INTO "EMP" VALUES(7934,'MILLER',7782,'23-01-1982',1300,10); create table SALGRADE ( GRADE int,LOSAL int,HISAL int ); INSERT INTO "SALGRADE" VALUES(1,700,1200); insert INTO "SALGRADE" VALUES(2,1201,1400); insert INTO "SALGRADE" VALUES(3,1401,2000); insert INTO "SALGRADE" VALUES(4,2001,3000); insert INTO "SALGRADE" VALUES(5,3001,9999); COMMIT;

大佬总结

以上是大佬教程为你收集整理的sqlite3常用命令&语法全部内容,希望文章能够帮你解决sqlite3常用命令&语法所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。